From: Jakub Jelinek Date: Fri, 6 Jun 2008 19:23:39 +0000 (+0000) Subject: * misc/regexp.h (compile): Use __REPB_PREFIX macro. X-Git-Tag: cvs/fedora-glibc-20080612T1619~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eef8a803a6846407fcd4955c3fb19036b6fac586;p=platform%2Fupstream%2Fglibc.git * misc/regexp.h (compile): Use __REPB_PREFIX macro. Avoid segfault if first GETC returns eof/'\0'/'\n'. 2008-06-05 Jakub Jelinek * misc/regexp.h (compile): Use __REPB_PREFIX macro. Avoid segfault if first GETC returns eof/'\0'/'\n'. --- diff --git a/ChangeLog b/ChangeLog index 3f6213f..ec8d346 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-06-05 Jakub Jelinek + + * misc/regexp.h (compile): Use __REPB_PREFIX macro. + Avoid segfault if first GETC returns eof/'\0'/'\n'. + 2008-06-03 Jakub Jelinek * nscd/nscd_getserv_r.c (__nscd_getservbyport_r): Pass cp diff --git a/misc/regexp.h b/misc/regexp.h index b7b50b7..0e979d2 100644 --- a/misc/regexp.h +++ b/misc/regexp.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 1999, 2004, 2008 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -129,8 +130,9 @@ compile (char *__restrict instring, char *__restrict expbuf, __expr_ptr = (regex_t *) expbuf; /* The remaining space in the buffer can be used for the compiled pattern. */ - __expr_ptr->buffer = expbuf + sizeof (regex_t); - __expr_ptr->allocated = endbuf - (char *) __expr_ptr->buffer; + __expr_ptr->__REPB_PREFIX (buffer) = expbuf + sizeof (regex_t); + __expr_ptr->__REPB_PREFIX (allocated) + = endbuf - (char *) __expr_ptr->__REPB_PREFIX (buffer); while ((__ch = (GETC ())) != eof) { @@ -162,7 +164,10 @@ compile (char *__restrict instring, char *__restrict expbuf, } __input_buffer[__current_size++] = __ch; } - __input_buffer[__current_size++] = '\0'; + if (__current_size) + __input_buffer[__current_size++] = '\0'; + else + __input_buffer = ""; /* Now compile the pattern. */ __error = regcomp (__expr_ptr, __input_buffer, REG_NEWLINE); @@ -198,7 +203,8 @@ compile (char *__restrict instring, char *__restrict expbuf, } /* Everything is ok. */ - RETURN ((char *) (__expr_ptr->buffer + __expr_ptr->used)); + RETURN ((char *) (__expr_ptr->__REPB_PREFIX (buffer) + + __expr_ptr->__REPB_PREFIX (used))); } #endif