Module Name: src Committed By: kamil Date: Tue Jun 12 21:22:47 UTC 2018
Modified Files: src/external/gpl2/grep/dist/src: dfa.c Log Message: Prevent Undefined Behavior in shift of signed integer in grep(1) There is an interface in grep: dfa.c with functions to test bit, set bit, clear bit etc. They operate over the INT-wide mask (INTBITS). Use unsigned shift in these interfaces to prevent UB. Detected with MKSANITIZER with the undefined behavior sanitizer option. Sponsored by <The NetBSD Foundation> To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/external/gpl2/grep/dist/src/dfa.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl2/grep/dist/src/dfa.c diff -u src/external/gpl2/grep/dist/src/dfa.c:1.2 src/external/gpl2/grep/dist/src/dfa.c:1.3 --- src/external/gpl2/grep/dist/src/dfa.c:1.2 Sun Jan 10 22:16:40 2016 +++ src/external/gpl2/grep/dist/src/dfa.c Tue Jun 12 21:22:47 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: dfa.c,v 1.2 2016/01/10 22:16:40 christos Exp $ */ +/* $NetBSD: dfa.c,v 1.3 2018/06/12 21:22:47 kamil Exp $ */ /* dfa.c - deterministic extended regexp routines for GNU Copyright 1988, 1998, 2000 Free Software Foundation, Inc. @@ -223,19 +223,19 @@ prtok (token t) static int tstbit (unsigned b, charclass c) { - return c[b / INTBITS] & 1 << b % INTBITS; + return c[b / INTBITS] & 1U << b % INTBITS; } static void setbit (unsigned b, charclass c) { - c[b / INTBITS] |= 1 << b % INTBITS; + c[b / INTBITS] |= 1U << b % INTBITS; } static void clrbit (unsigned b, charclass c) { - c[b / INTBITS] &= ~(1 << b % INTBITS); + c[b / INTBITS] &= ~(1U << b % INTBITS); } static void @@ -2203,7 +2203,7 @@ dfastate (int s, struct dfa *d, int tran /* Set the transitions for each character in the current label. */ for (j = 0; j < CHARCLASS_INTS; ++j) for (k = 0; k < INTBITS; ++k) - if (labels[i][j] & 1 << k) + if (labels[i][j] & 1U << k) { int c = j * INTBITS + k;