Module: wine Branch: master Commit: a96e118ddbc47f1567ae8c16f5f53ca9ab564f29 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a96e118ddbc47f1567ae8c16f5...
Author: Juan Lang juan.lang@gmail.com Date: Fri May 16 16:09:11 2008 -0700
snmpapi: Test and correct SnmpUtilOidNCmp when Oid lengths don't match.
---
dlls/snmpapi/main.c | 8 ++++++-- dlls/snmpapi/tests/util.c | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/dlls/snmpapi/main.c b/dlls/snmpapi/main.c index 62e9ab3..0e60d88 100644 --- a/dlls/snmpapi/main.c +++ b/dlls/snmpapi/main.c @@ -343,17 +343,21 @@ VOID WINAPI SnmpUtilOidFree(AsnObjectIdentifier *oid) */ INT WINAPI SnmpUtilOidNCmp(AsnObjectIdentifier *oid1, AsnObjectIdentifier *oid2, UINT count) { - unsigned int i; + unsigned int i, len;
TRACE("(%p, %p, %d)\n", oid1, oid2, count);
if (!oid1 || !oid2) return 0;
- for (i = 0; i < count; i++) + len = min(count, oid1->idLength); + len = min(len, oid2->idLength); + for (i = 0; i < len; i++) { if (oid1->ids[i] > oid2->ids[i]) return 1; if (oid1->ids[i] < oid2->ids[i]) return -1; } + if (oid1->idLength < oid2->idLength) return -1; + if (oid1->idLength > oid2->idLength) return 1; return 0; }
diff --git a/dlls/snmpapi/tests/util.c b/dlls/snmpapi/tests/util.c index 72bcdc8..3d513bd 100644 --- a/dlls/snmpapi/tests/util.c +++ b/dlls/snmpapi/tests/util.c @@ -321,6 +321,15 @@ static void test_SnmpUtilOidNCmp(void)
ret = SnmpUtilOidNCmp(&oid2, &oid1, 4); ok(ret == 1, "SnmpUtilOidNCmp failed: %d\n", ret); + + oid1.idLength = 3; + memcpy(oid1.ids, oid2.ids, sizeof(UINT) * 4); + ret = SnmpUtilOidNCmp(&oid1, &oid1, 4); + ok(!ret, "SnmpUtilOidNCmp failed: %d\n", ret); + ret = SnmpUtilOidNCmp(&oid2, &oid1, 4); + ok(ret == 1, "SnmpUtilOidNCmp failed: %d\n", ret); + ret = SnmpUtilOidNCmp(&oid1, &oid2, 4); + ok(ret == -1, "SnmpUtilOidNCmp failed: %d\n", ret); }
static void test_SnmpUtilOidCmp(void)