php-src/ext/ereg/regex.patch
2011-08-12 07:47:03 +00:00

73 lines
1.8 KiB
Diff

diff -u regex.orig/regerror.c regex/regerror.c
--- regex.orig/regerror.c 2011-08-09 19:49:30.000000000 +0800
+++ regex/regerror.c 2011-08-12 10:45:57.000000000 +0800
@@ -8,6 +8,7 @@
#include "regex.h"
#include "utils.h"
#include "regerror.ih"
+#include "php.h"
/*
= #define REG_OKAY 0
@@ -74,17 +75,19 @@
char convbuf[50];
if (errcode == REG_ATOI)
- s = regatoi(preg, convbuf);
+ s = regatoi(preg, convbuf, sizeof(convbuf));
else {
for (r = rerrs; r->code >= 0; r++)
if (r->code == target)
break;
if (errcode&REG_ITOA) {
- if (r->code >= 0)
- (void) strcpy(convbuf, r->name);
- else
- sprintf(convbuf, "REG_0x%x", target);
+ if (r->code >= 0) {
+ (void) strncpy(convbuf, r->name, sizeof(convbuf) - 1);
+ convbuf[sizeof(convbuf) - 1] = '\0';
+ } else {
+ snprintf(convbuf, sizeof(convbuf), "REG_0x%x", target);
+ }
assert(strlen(convbuf) < sizeof(convbuf));
s = convbuf;
} else
@@ -106,12 +109,13 @@
/*
- regatoi - internal routine to implement REG_ATOI
- == static char *regatoi(const regex_t *preg, char *localbuf);
+ == static char *regatoi(const regex_t *preg, char *localbuf, int bufsize);
*/
static char *
-regatoi(preg, localbuf)
+regatoi(preg, localbuf, bufsize)
const regex_t *preg;
char *localbuf;
+int bufsize;
{
register const struct rerr *r;
@@ -121,6 +125,6 @@
if (r->code < 0)
return("0");
- sprintf(localbuf, "%d", r->code);
+ snprintf(localbuf, bufsize, "%d", r->code);
return(localbuf);
}
diff -u regex.orig/regerror.ih regex/regerror.ih
--- regex.orig/regerror.ih 2011-08-09 19:49:00.000000000 +0800
+++ regex/regerror.ih 2011-08-09 19:41:07.000000000 +0800
@@ -4,7 +4,7 @@
#endif
/* === regerror.c === */
-static char *regatoi(const regex_t *preg, char *localbuf);
+static char *regatoi(const regex_t *preg, char *localbuf, int bufsize);
#ifdef __cplusplus
}