Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
perl.6851
perl-regexec-heap-overflow.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File perl-regexec-heap-overflow.diff of Package perl.6851
--- ./regexec.c.orig 2018-03-12 10:06:19.475661653 +0000 +++ ./regexec.c 2018-03-12 10:06:36.322612919 +0000 @@ -1226,13 +1226,15 @@ Perl_re_intuit_start(pTHX_ REGEXP * cons ? (utf8_target ? trie_utf8 : trie_plain) \ : (utf8_target ? trie_utf8_fold : trie_latin_utf8_fold)) -#define REXEC_TRIE_READ_CHAR(trie_type, trie, widecharmap, uc, uscan, len, uvc, charid, foldlen, foldbuf, uniflags) \ +/* 'uscan' is set to foldbuf, and incremented, so below the end of uscan is + * 'foldbuf+sizeof(foldbuf)' */ +#define REXEC_TRIE_READ_CHAR(trie_type, trie, widecharmap, uc, uc_end, uscan, len, uvc, charid, foldlen, foldbuf, uniflags) \ STMT_START { \ STRLEN skiplen; \ switch (trie_type) { \ case trie_utf8_fold: \ if ( foldlen>0 ) { \ - uvc = utf8n_to_uvuni( (const U8*) uscan, UTF8_MAXLEN, &len, uniflags ); \ + uvc = utf8n_to_uvuni( (const U8*) uscan, foldlen, &len, uniflags ); \ foldlen -= len; \ uscan += len; \ len=0; \ @@ -1246,7 +1248,7 @@ STMT_START { break; \ case trie_latin_utf8_fold: \ if ( foldlen>0 ) { \ - uvc = utf8n_to_uvuni( (const U8*) uscan, UTF8_MAXLEN, &len, uniflags ); \ + uvc = utf8n_to_uvuni( (const U8*) uscan, foldlen, &len, uniflags ); \ foldlen -= len; \ uscan += len; \ len=0; \ @@ -1259,7 +1261,7 @@ STMT_START { } \ break; \ case trie_utf8: \ - uvc = utf8n_to_uvuni( (const U8*) uc, UTF8_MAXLEN, &len, uniflags ); \ + uvc = utf8n_to_uvuni( (const U8*) uc, uc_end - uc, &len, uniflags ); \ break; \ case trie_plain: \ uvc = (UV)*uc; \ @@ -1927,7 +1929,7 @@ S_find_byclass(pTHX_ regexp * prog, cons points[pointpos++ % maxlen]= uc; if (foldlen || uc < (U8*)strend) { REXEC_TRIE_READ_CHAR(trie_type, trie, - widecharmap, uc, + widecharmap, uc, (U8*)strend, uscan, len, uvc, charid, foldlen, foldbuf, uniflags); DEBUG_TRIE_EXECUTE_r({ @@ -3875,7 +3877,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, /* read a char and goto next state */ if ( base && (foldlen || uc < (U8*)PL_regeol)) { I32 offset; - REXEC_TRIE_READ_CHAR(trie_type, trie, widecharmap, uc, + REXEC_TRIE_READ_CHAR(trie_type, trie, widecharmap, uc, (U8*)PL_regeol, uscan, len, uvc, charid, foldlen, foldbuf, uniflags); charcount++; @@ -4009,7 +4011,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, while (foldlen) { if (!--chars) break; - uvc = utf8n_to_uvuni(uscan, UTF8_MAXLEN, &len, + uvc = utf8n_to_uvuni(uscan, foldlen, &len, uniflags); uscan += len; foldlen -= len;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor