From 66c25c360afb161be02fbdb8da21cd02c9d99447 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 12 Feb 2016 16:00:53 -0800 Subject: [PATCH] Fix regerror(..., nullptr, 0). Found by passing a bad regular expression to the Google benchmark code (https://github.com/google/benchmark). (cherry picked from commit cac2908b08f517802e719ddafe39f45c85c96a33) Change-Id: I317a7c2ea6535998c0853029023fcefc88cb3750 --- libc/Android.mk | 4 +++- libc/upstream-netbsd/android/include/netbsd-compat.h | 11 +++++------ tests/regex_test.cpp | 11 +++++++++++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/libc/Android.mk b/libc/Android.mk index d94dce231..1ca84c14a 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -856,7 +856,9 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := $(libc_upstream_netbsd_src_files) LOCAL_CFLAGS := \ $(libc_common_cflags) \ - -Wno-sign-compare -Wno-uninitialized \ + -Wno-sign-compare \ + -Wno-uninitialized \ + -Wno-unused-parameter \ -DPOSIX_MISTAKE \ -include netbsd-compat.h \ diff --git a/libc/upstream-netbsd/android/include/netbsd-compat.h b/libc/upstream-netbsd/android/include/netbsd-compat.h index 0212d1664..bfd040180 100644 --- a/libc/upstream-netbsd/android/include/netbsd-compat.h +++ b/libc/upstream-netbsd/android/include/netbsd-compat.h @@ -20,17 +20,16 @@ #define _BSD_SOURCE #define _GNU_SOURCE -// NetBSD uses _DIAGASSERT to null-check arguments and the like. -#include -#define _DIAGASSERT(e) ((e) ? (void) 0 : __assert2(__FILE__, __LINE__, __func__, #e)) - -// TODO: update our to support this properly. -#define __type_fit(t, a) (0 == 0) +// NetBSD uses _DIAGASSERT to null-check arguments and the like, +// but it's clear from the number of mistakes in their assertions +// that they don't actually test or ship with this. +#define _DIAGASSERT(e) /* nothing */ // TODO: we don't yet have thread-safe environment variables. #define __readlockenv() 0 #define __unlockenv() 0 +#include #include int reallocarr(void*, size_t, size_t); diff --git a/tests/regex_test.cpp b/tests/regex_test.cpp index 4a4409ef3..0e7f8dd7f 100644 --- a/tests/regex_test.cpp +++ b/tests/regex_test.cpp @@ -46,3 +46,14 @@ TEST(regex, match_offsets) { ASSERT_EQ(2, matches[0].rm_eo); regfree(&re); } + +TEST(regex, regerror_NULL_0) { + regex_t re; + int error = regcomp(&re, "*", REG_EXTENDED); + ASSERT_NE(0, error); + + // Passing a null pointer and a size of 0 is a legitimate way to ask + // how large a buffer we would need for the error message. + int error_length = regerror(error, &re, nullptr, 0); + ASSERT_GT(error_length, 0); +}