SECURITY:
CAN-2005-2491, http://securitytracker.com/id?1014744 "A remote or local user may be able to supply a specially crafted regular expression to trigger a heap integer overflow in PCRE." ok pvalchev@
This commit is contained in:
parent
b5ba305851
commit
bf7cc206f8
@ -1,8 +1,9 @@
|
||||
# $OpenBSD: Makefile,v 1.13 2004/11/24 00:11:03 espie Exp $
|
||||
# $OpenBSD: Makefile,v 1.14 2005/08/22 22:40:28 naddy Exp $
|
||||
|
||||
COMMENT= "perl-compatible regular expression library"
|
||||
|
||||
DISTNAME= pcre-4.5
|
||||
PKGNAME= ${DISTNAME}p0
|
||||
CATEGORIES= devel
|
||||
|
||||
MASTER_SITES= ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ \
|
||||
|
55
devel/pcre/patches/patch-pcre_c
Normal file
55
devel/pcre/patches/patch-pcre_c
Normal file
@ -0,0 +1,55 @@
|
||||
$OpenBSD: patch-pcre_c,v 1.1 2005/08/22 22:40:29 naddy Exp $
|
||||
--- pcre.c.orig Wed Dec 10 17:45:44 2003
|
||||
+++ pcre.c Mon Aug 22 22:27:27 2005
|
||||
@@ -1047,14 +1047,30 @@ read_repeat_counts(const uschar *p, int
|
||||
int min = 0;
|
||||
int max = -1;
|
||||
|
||||
+/* Read the minimum value and do a paranoid check: a negative value indicates
|
||||
+an integer overflow. */
|
||||
+
|
||||
while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
|
||||
+if (min < 0 || min > 65535)
|
||||
+ {
|
||||
+ *errorptr = ERR5;
|
||||
+ return p;
|
||||
+ }
|
||||
|
||||
+/* Read the maximum value if there is one, and again do a paranoid on its size.
|
||||
+Also, max must not be less than min. */
|
||||
+
|
||||
if (*p == '}') max = min; else
|
||||
{
|
||||
if (*(++p) != '}')
|
||||
{
|
||||
max = 0;
|
||||
while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
|
||||
+ if (max < 0 || max > 65535)
|
||||
+ {
|
||||
+ *errorptr = ERR5;
|
||||
+ return p;
|
||||
+ }
|
||||
if (max < min)
|
||||
{
|
||||
*errorptr = ERR4;
|
||||
@@ -1063,16 +1079,11 @@ if (*p == '}') max = min; else
|
||||
}
|
||||
}
|
||||
|
||||
-/* Do paranoid checks, then fill in the required variables, and pass back the
|
||||
-pointer to the terminating '}'. */
|
||||
+/* Fill in the required variables, and pass back the pointer to the terminating
|
||||
+'}'. */
|
||||
|
||||
-if (min > 65535 || max > 65535)
|
||||
- *errorptr = ERR5;
|
||||
-else
|
||||
- {
|
||||
- *minp = min;
|
||||
- *maxp = max;
|
||||
- }
|
||||
+*minp = min;
|
||||
+*maxp = max;
|
||||
return p;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user