Wrong comparison in ntdll/actctx.c

nlataill nlataill at gmail.com
Mon Nov 19 16:26:46 CST 2007


Hi,

Yes, I can see that such 4-level comparisons are already
in the actctx.c codebase (probably for a reason ?). Looking at
MSDN earlier this evening, I could not find reference to 3rd and
4th entries in comparisons, but I probably skipped the right section
in the doc.

Do you believe it is worthwhile to check this comparison function
from a windows test perspective ?

Thanks,

Norbert

2007/11/19, Robert Shearman <rob at codeweavers.com>:
>
> nlataill wrote:
> > Adding verbosity to actctx.c, it seems that this game is requesting
> > version 8.0.50608.0, which does match major.minor,
> > but not the whole version number (/major.minor.build.revision)/.
> >
> ...
> > According to MSDN, it seems only major.minor is considered for version
> > matching:
> > - http://msdn2.microsoft.com/en-us/library/aa374234.aspx : A version
> > number that changes only in the /build/ or /revision/ parts indicates
> > that the assembly is backward compatible with prior versions.
> > - http://msdn2.microsoft.com/en-us/library/aa375365.aspx: [...] are
> > manifests used to redirect the version of a side-by-side assembly to
> > another compatible version. The version that the assembly is being
> > redirected to should have the same major.minor values as the original
> > version.
> >
> > I am proposing the following one-liner to ntdll/actctx.c:
> >
> > isa at isa:~/downloads/tmp$ diff -u wine-0.9.49/dlls/ntdll/actctx.c
> > /home/isa/downloads/wine-0.9.49/dlls/ntdll/actctx.c
> > --- wine-0.9.49/dlls/ntdll/actctx.c     2007-11-09 17:56: 12.000000000
> > +0100
> > +++ /home/isa/downloads/wine-0.9.49/dlls/ntdll/actctx.c 2007-11-19
> > 21:07:35.000000000 +0100
> > @@ -1390,8 +1390,8 @@
> >          if (expected_ai)
> >          {
> >              /* FIXME: more tests */
> > -            if (assembly->type == ASSEMBLY_MANIFEST &&
> > -                memcmp(&assembly->id.version, &expected_ai->version,
> > sizeof(assembly->id.version)))
> > +            if (assembly->type == ASSEMBLY_MANIFEST &&
> > +                ((assembly->id.version.major !=
> > expected_ai->version.major) || (assembly->id.version.minor !=
> > expected_ai->version.minor)) )
> >              {
> >                  FIXME("wrong version\n");
> >                  return FALSE;
> >
> > With this patch, the manifest (and related DLL) is loading correctly.
> > This does not prevent my game die shortly after, in D3D code this
> > time. Still work to do ;-)
>
> I think the attached patch is more complete and implements what MSDN
> states.
>
> --
> Rob Shearman
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.winehq.org/pipermail/wine-devel/attachments/20071119/2d14e79c/attachment.htm 


More information about the wine-devel mailing list