--- resbin.c Wed Nov 14 09:16:44 2001 +++ resbin.c Wed Nov 14 09:21:22 2001 @@ -1071,7 +1071,6 @@ first = NULL; pp = &first; - while (length > 0) { struct ver_info *vi; @@ -1129,18 +1128,33 @@ (const char *) NULL, &vs->key, &subverlen, &vallen, &type, &off); - subverlen = (subverlen + 3) &~ 3; + subverlen = (subverlen + 3) &~ 3; + data += off; length -= off; - vs->value = get_unicode (data, length, big_endian, &vslen); - valoff = vslen * 2 + 2; - valoff = (valoff + 3) &~ 3; + if ( vallen != 0 ) + { + vs->value = get_unicode (data, length, big_endian, &vslen); + valoff = vslen * 2 + 2; + valoff = (valoff + 3) &~ 3; + + if (off + valoff != subverlen) + fatal (_("unexpected version string length %d != %d + %d"), + subverlen, off, valoff); + if (verlen < subverlen) + { + fatal (_("unexpected version string length %d < %d"), + verlen, subverlen); + } + } + else + { + vs->value = L""; + valoff = 0; + } - if (off + valoff != subverlen) - fatal (_("unexpected version string length %d != %d + %d"), - subverlen, off, valoff); vs->next = NULL; *ppvs = vs; @@ -1148,10 +1162,6 @@ data += valoff; length -= valoff; - - if (verlen < subverlen) - fatal (_("unexpected version string length %d < %d"), - verlen, subverlen); verlen -= subverlen; }