=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ldap/Attic/ber.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- src/usr.bin/ldap/Attic/ber.c 2018/11/27 12:04:57 1.21 +++ src/usr.bin/ldap/Attic/ber.c 2019/04/27 14:58:14 1.22 @@ -1,4 +1,4 @@ -/* $OpenBSD: ber.c,v 1.21 2018/11/27 12:04:57 martijn Exp $ */ +/* $OpenBSD: ber.c,v 1.22 2019/04/27 14:58:14 rob Exp $ */ /* * Copyright (c) 2007, 2012 Reyk Floeter @@ -1240,8 +1240,9 @@ } /* sign extend if MSB is set */ - if (val >> ((i - 1) * 8) & 0x80) - val |= ULLONG_MAX << (i * 8); + if (len < (ssize_t)sizeof(long long) && + (val >> ((len - 1) * 8) & 0x80)) + val |= ULLONG_MAX << (len * 8); elm->be_numeric = val; break; case BER_TYPE_BITSTRING: