X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=deblob-check;h=64347e2a7ffe73ec6bc3384d28a06c05c4b505c1;hb=d7f8ffd6945e762f59be5031698883772005cbd3;hp=eda5c8cc31c35ef3537660d64b80796e4d7fd63d;hpb=b5b8f30d6ad370e1ddfa0e346af6769dbd471aef;p=releases.git diff --git a/deblob-check b/deblob-check index eda5c8cc31c3..64347e2a7ffe 100755 --- a/deblob-check +++ b/deblob-check @@ -1,6 +1,6 @@ #! /bin/sh -# deblob-check version 2010-02-04 +# deblob-check version 2010-02-10 # Inspired in gNewSense's find-firmware script. # Written by Alexandre Oliva @@ -112,7 +112,7 @@ # to be blobs, be they known false positives or not. # -p --mark-false-positives: print the processed input, replacing -# sequences that match the blob detector test, even those +# sequences that match the blob detector test, even those # known to be false positives, with /*(DEBLOBBED)*/. # -P --list-false-positives: list files that contain false positives. @@ -254,20 +254,20 @@ case ${LANG+set} in set) LANG=C; export LANG;; esac rm="rm -f" for echo in 'echo' 'printf %s\n'; do - case `$echo '\nx'` in + case `$echo '\nx'` in '\nx') break;; esac done -case `$echo '\nx'` in +case `$echo '\nx'` in '\nx') ;; *) echo Cannot find out what echo to use >&2; exit 1;; esac for echo_n in "echo -n" "printf %s"; do - case `$echo_n '\na'; $echo_n '\nb'` in + case `$echo_n '\na'; $echo_n '\nb'` in '\na\nb') break;; esac done -case `$echo_n a; $echo_n b` in +case `$echo_n a; $echo_n b` in 'ab') ;; *) echo Cannot find out an echo -n equivalent to use >&2; exit 1;; esac @@ -300,7 +300,7 @@ i\\ ;; esac ;; -*) +*) v="# " vp="0" ;; @@ -408,7 +408,7 @@ case $1 in set_cmd=set_eqscript_cmd; set_main_cmd=set_perl_main; ;; - + --use-awk) shift; set_cmd=set_eqscript_cmd; @@ -619,10 +619,18 @@ case $1 in esac if $test_mode; then + allpass=: + for tool in awk perl python sed; do + echo testing $tool... + + targs="-s 4 -i /deblob-check-testsuite/ --use-$tool" + pass=: - # Exercise some nasty inputs to see that we recognize them as blobs - # with full context. + + # Exercise some nasty inputs to see that we + # recognize them as blobs with full context. + test="positive context" for string in \ "1,2,3,4" \ "= { @@ -642,7 +650,7 @@ if $test_mode; then "#define X { 1, 2, \\ 3, 4, /* comment */ \\ }" \ - "= { + "= { /* * multi-line * comment @@ -650,38 +658,217 @@ if $test_mode; then { 0x4c00c000, 0x00000000, 0x00060000, 0x00000000, }, +}" \ + "= { +blob( +) +accept( +) +1, 2, 3, 4 }" \ ; do - case `echo "$string" | $0 -s 4 -C` in + case `echo "$string" | $0 $targs -C` in "::: - ::: $string") ;; - *) echo "failed positive test for: + *) echo "failed $test test for: $string" >&2 pass=false;; esac done # Make sure we do not recognize these as blobs. + test=negative for string in \ "#define X { 1, 2 } #define Y { 3, 4 }" \ " 0x00, 0x00, 0x00 " \ + "accept(1, 2, 3, +4, 5, 6)" \ ; do - case `echo "$string" | $0 -s 4` in + case `echo "$string" | $0 $targs` in "") ;; - *) echo "failed negative test for: + *) echo "failed $test test for: $string" >&2 pass=false;; esac done + # Make sure we print only the lines with blobs. + test="only blob" + odd=: + for string in \ + "= { +1, 0x2, 03, L'\x4' +}" \ + "1, 0x2, 03, L'\x4'" \ +\ + "= +{ + '\\x1', '\\002' + , + { + { \"\\x3\", }, + \"\\004\" + }, +};" \ + " '\\x1', '\\002' + , + { + { \"\\x3\", }, + \"\\004\"" \ +\ + ".long 1,2 + .long \$3,\$4" \ + ".long 1,2 + .long \$3,\$4" \ +\ + "#define X { 1, 2, \\ + 3, 4, /* comment */ \\ + }" \ + "#define X { 1, 2, \\ + 3, 4, /* comment */ \\" \ +\ + "= { +/* + * multi-line + * comment + */ + { + 0x4c00c000, 0x00000000, 0x00060000, 0x00000000, + }, +}" \ + " 0x4c00c000, 0x00000000, 0x00060000, 0x00000000," \ +\ + "MODULE_FIRMWARE(x); +MODULE_FIRMWARE(y); +1, 2, 3, 4; 5, 6, 7, 8; +9, 10, 11" \ + "MODULE_FIRMWARE(x); +MODULE_FIRMWARE(y); +::: - ::: +1, 2, 3, 4; 5, 6, 7, 8;" \ +\ + "= { +blob() +accept() +1, 2, 3, 4 +}" \ + "blob() +::: - ::: +1, 2, 3, 4" \ +\ + "a blobeol y +x" \ + "a blobeol y +x" \ +\ + ; do + if $odd; then + input=$string odd=false + continue + fi + case `echo "$input" | $0 $targs -B` in + "::: - ::: +$string") ;; + *) + echo "failed $test test for: +$input" >&2 + pass=false + ;; + esac + odd=: + done + $odd || { echo "internal testsuite failure in $test" >&2; } + + # Make sure we deblob only the blobs. + test="deblobs" + odd=: + for string in \ + "= { 1, 0x2, 03, L'\x4' }" \ + "= { /*(DEBLOBBED)*/' }" \ +\ + "= +{ + '\\x1', '\\002' + , + { + { \"\\x3\", }, + \"\\004\" + }, +};" \ + " '\\x/*(DEBLOBBED)*/\"" \ +\ + ".long 1,2 + .long \$3,\$4" \ + ".long /*(DEBLOBBED)*/" \ +\ + "#define X { 1, 2, \\ + 3, 4, /* comment */ \\ + }" \ + "#define X { /*(DEBLOBBED)*/, /* comment */ \\" \ +\ + "= { +/* + * multi-line + * comment + */ + { + 0x4c00c000, 0x00000000, 0x00060000, 0x00000000, + }, +}" \ + " /*(DEBLOBBED)*/," \ +\ + "MODULE_FIRMWARE(x); +MODULE_FIRMWARE(y); +1, 2, 3, 4; 5, 6; 7, 8, 9, 10; +9, 10, 11" \ + "/*(DEBLOBBED)*/ +::: - ::: +/*(DEBLOBBED)*/; 5, 6; /*(DEBLOBBED)*/;" \ +\ + "= { +accept() blob() x blob( +) y +}" \ + "accept() /*(DEBLOBBED)*/ x /*(DEBLOBBED)*/ y" \ +\ + "= { +accept() blob() x blob( +w) y +}" \ + "accept() /*(DEBLOBBED)*/ x /*(DEBLOBBED)*/ y" \ +\ + "a blobeol y +x" \ + "a /*(DEBLOBBED)*/x" \ +\ + ; do + if $odd; then + input=$string odd=false + continue + fi + case `echo "$input" | $0 $targs -b` in + "::: - ::: +$string") ;; + *) + echo "failed $test test for: +$input" >&2 + pass=false + ;; + esac + odd=: + done + $odd || { echo "internal testsuite failure in $test" >&2; } + # How did we do? if $pass; then - echo success + echo success for $tool + else + allpass=$pass fi - - $pass - exit + done + $allpass + exit fi # Call addx as needed to set up more patterns to be recognized as @@ -906,7 +1093,6 @@ set_except () { initnc 'struct[ ]pattern[ ][{][^}]*int[ ]tone[;][^}]*[}][ ]pattern\[\][ ]=' drivers/isdn/mISDN/dsp_tones.c initnc 'static[ ]u8[ ]\([au]\|_4\)law_to_\([ua]law\|4bit\)\[256\][ ]=' drivers/isdn/mISDN/l1oip_codec.c initnc 'static[ ]unsigned[ ]char[ ]banner_table\[\][ ]=' arch/sh/boards/mach-microdev/led.c - accept 'irq_prio_\([hdl]\|l[cd]\):'"$sepx$blobpat*" arch/arm/inlcude/asm/hardware/entry-macro-iomd.S defsnc '[ ]static[ ]const[ ]int[ ]desc_idx_table\[\][ ]=' arch/arm/include/asm/hardware/iop3xx-adma.h defsnc 'static[ ]\(const[ ]\)\?u32[ ]ar\(5416\|9280\)\(Modes\(_fast_clock\)\?\|Common\|BB_RfGain\|Bank6\(TPC\)\?\|Addac\)\(_91[06]0\(1_1\)\?\|_9280\(_2\)\?\)\?\[\]\[[236]\][ ]=' drivers/net/wireless/ath9k/initvals.h @@ -1157,7 +1343,7 @@ set_except () { blobname 'whiteheat\(_loader\(_debug\)\?\)\?\.fw' drivers/usb/serial/whiteheat.c blob 'static[ ]struct[ ]BA1struct[ ]BA1Struct[ ]=[ ][{][^;]*[}][;]' sound/pci/cs46xx/cs46xx_image.h - + blob 'static[ ]u32[ ]cwc\(4630\|async\|snoop\)_\(code\|parameter\)\[\][ ]=[ ][{][^;]*[}][;]' 'sound/pci/cs46xx/imgs/cwc\(4630\|async\|snoop\)\.h' # cwcbinhack appears to have been created by hand. # cwcdma has sources (not verified) in cwcdma.asp. @@ -1404,17 +1590,17 @@ set_except () { blobname '\([/]etc[/]sound[/]\)\?midi0001\.bin' sound/oss/sb_common.c blobname '\([/]etc[/]sound[/]\|turtlebeach[/]\)\?msnd\(init\|perm\)\.bin' sound/oss/Kconfig - blob 'When[ ]the[ ]module[ ]is[ ]loaded\([^\n]\|[\n][^\n]\)*[/]pss_synth\([^\n]\|[\n][^\n]\)*' Documentation/sound/oss/PSS - blob 'pss_firmware[ \n ]*This[ ]parameter\([^\n]\|[\n][^\n]\)*[/]pss_synth\([^\n]\|[\n][^\n]\)*' Documentation/sound/oss/PSS-updates + blob 'When[ ]the[ ]module[ ]is[ ]loaded[^\n]*\([\n][^\n]*\)*[/]pss_synth[^\n]*\([\n][^\n]*\)*' Documentation/sound/oss/PSS + blob 'pss_firmware[ \n ]*This[ ]parameter[^\n]*\([\n][^\n]*\)*[/]pss_synth[^\n]*\([\n][^\n]*\)*' Documentation/sound/oss/PSS-updates accept '[ ][ ]pss_synthLen[ ]=[ ]mod_firmware_load[(]pss_firmware,[ ][(]void[ ][*][)][ ][&]pss_synth[)][;]' sound/oss/pss.c accept '[ ]*if[ ]\?[(]\(!\|fw_load[ ][&][&][ ]\)\?pss_synth' sound/oss/pss.c accept '[ ]*if[ ][(]!pss_download_boot[(]devc,[ ]pss_synth,[ ]pss_synthLen,' sound/oss/pss.c accept '[ ]*vfree[(]pss_synth[)][;]' sound/oss/pss.c - blob 'to[ ]allow[ ]the[ ]user[ ]\([^/"]\|[^*"][/]*\)*fir[em]ware[ ]file\([^/"]\|[^*"][/]*\)*["][^"]*["]' sound/oss/pss.c + blob 'to[ ]allow[ ]the[ ]user[ ][^/"]*fir[em]ware[ ]file[^/"]*["][^"*]*["]' sound/oss/pss.c blobname '\([/]etc[/]sound[/]\)\?pss_synth' sound/oss/pss.c accept '[ ][$][(]obj[)][/]bin2hex[ ]pss_synth' sound/oss/Makefile accept '[ ][ ]*echo[ ][\'"'"']static[ ]\(unsigned[ ]char[ ][*][ ]*\|int[ ]\)pss_synth\(Len\)\?[ ]=[ ]\(NULL\|0\)[;]' sound/oss/Makefile - + accept '[ ]\.request_firmware[ ]=[ ]NULL,' drivers/media/dvb/dvb-usb/m920x.c accept '[ ]*["]request_firmware[ ]\(fatal[ ]error\|unable[ ]to[ ]locate\|:[ ]Failed[ ]to[ ]find\)' drivers/media/video/pvrusb2/pvrusb2-hdw.c @@ -1543,7 +1729,7 @@ set_except () { blobname 'e100[/]d10\(1[ms]\|2e\)_ucode\.bin' drivers/net/e100.c blobname 'tigon[/]tg3\(_tso5\?\)\?\.bin' drivers/net/tg3.c blobname '\(ti_usb-v\(%04x\|[0-9a-f]*\)-p\(%04x\|[0-9a-f]*\)\|mts_\(cdma\|gsm\|edge\)\)\.\(bin\|fw\)' drivers/usb/serial/ti_usb_3410_5052.c - blobname 'iw\?\(2400\|6050\)m-fw-\(sdio\|usb\)-\(\(["][ ]I2400M_FW_VERSION[ ]["]\|[0-9.]*\)\.sbcf\|[^". \n]*\)' 'drivers/net/wimax/i2400m/\(sdio\|usb\)\.c' + blobname 'iw\?\(2400\|6050\)m\?-fw-\(sdio\|usb\)-\(\(["][ ]I2400M_FW_VERSION[ ]["]\|[0-9.]*\)\.sbcf\|[^". \n]*\)' 'drivers/net/wimax/i2400m/\(sdio\|usb\)\.c' blob '3\.[ ]Installing[ ]the[ ]firmware[^\n]*\([\n][\n]*[ ][ ][ ][^\n]*\)*[\n]*[$][^\n]*i2400m-fw[^\n]*\([\n][\n]*[ ][ ][ ][^\n]*\)*' Documentation/wimax/README.i2400m blob '6\.1\.[ ]Driver[ ]complains[^\n]*i2400m-fw[^\n]*\([\n][\n]*\([ ][ ][ ]\|i2400m_usb\)[^\n]*\)*' Documentation/wimax/README.i2400m accept '[ ][ ]ranges[ ]=[ ]<'"$blobpat*"'>[;]' 'arch/powerpc/boot/dts/\(mpc8572ds\|p2020ds\|katmai\)\.dts' @@ -1589,7 +1775,7 @@ set_except () { blob '\(UCHAR\|u8\)[ ]FirmwareImage\(_\(2870\|30[79]0\)\)\?[ ]\[\][ ]=[ ][{][^;]*[}][ ][;]' 'drivers/staging/rt\(28[67]\|30[79]\)0/common/firmware\(_3070\)\?\.h' defsnc 'ULONG[ ][ ]*BIT32\[\][ ]=' 'drivers/staging/rt28[67]0/common/rtmp_init\.c' defsnc 'const[ ]unsigned[ ]short[ ]ccitt_16Table\[\][ ]=' 'drivers/staging/rt\(28[67]0\|3090\)/common/rtmp_init\.c' - blobna '\(pFirmwareImage[ ]=[ ]\(FirmwareImage\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\)\?_LENGTH\)\)[;]\([\n ]*\(pFirmwareImage[ ]=[ ]\(FirmwareImage\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\)\?_LENGTH\)\)[;]\)*' 'drivers/staging/rt\(28[67]0\|30[79]0\)/common/rtmp_init\.c' + blobna '\(pFirmwareImage[ ]=\([ ]FirmwareImage\(_\(28[67]\|30[79]\)0\)\?\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\|_MAX\)\?_LENGTH\)\)[;]\([\n ]*\(pFirmwareImage[ ]=\([ ]FirmwareImage\(_\(28[67]\|30[79]\)0\)\?\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\|_MAX\)\?_LENGTH\)\)[;]\)*' 'drivers/staging/rt\(28[67]0\|30[79]0\)/common/rtmp_init\.c' blobname 'rate\.bin' drivers/staging/rt2870/rtmp_init.c defsnc '\(U\(INT\|CHAR\)\|u\(32\|8\)\)[ ]\(Tkip_Sbox_\(Lower\|Upper\)\|SboxTable\)\[256\][ ]=' 'drivers/staging/rt\(28[67]0\|3070\)/common/\(rtmp\|cmm\)_tkip\.c' defsnc '\(UINT\|u32\)[ ]FCSTAB_32\[256\][ ]=' 'drivers/staging/rt\(28[67]0\|3070\)/common/\(rtmp\|cmm\)_wep\.c' @@ -1605,6 +1791,17 @@ set_except () { accept '[ ]-[ ]move[ ]firmware[ ]loading[ ]to[ ]request_firmware[(][)]' drivers/staging/slicoss/README blobname '\(\(oasis\|gb\)_rcv\|slic_\(oasis\|mojave\)\)\.bin' drivers/staging/slicoss/slicoss.c + blob 'static[ ]unsigned[ ]char[ ]xilinx_firm\(_4610\)\?\[\][ ]=[ ][{]'"$sepx$blobpat*$sepx"'[}][;]' 'drivers/staging/me4000/me4\(00\|61\)0_firmware\.h' + blob 'static[ ]struct[ ]PHY_UCODE[ ]PhyUcode\[\][ ]=[^;]*[;]' drivers/staging/sxg/sxgphycode.h + blob 'static[ ]unsigned[ ]char[ ]SaharaUCode\[2\]\[57972\][ ]=[^;]*[;]' drivers/staging/sxg/saharadbgdownload.h + blob '#include[ ]["]\(sxgphycode\(-1\.2\)\?\|saharadbgdownload\)\.h["]\([\n][\n]*#include[ ]["]\(sxgphycode\(-1\.2\)\?\|saharadbgdownload\)\.h["]\)*' drivers/staging/sxg/sxg.c + blob 'static[ ]u8[ ]\(Mojave\|Oasis\)UCode\[2\]\[65536\][ ]=[^;]*[;]' 'drivers/staging/slicoss/\(gb\|oasis\(dbg\)\?\)download\.h' + blob 'static[ ]u8[ ]\(GB\|Oasis\)RcvUCode\[2560\][ ]=[^;]*[;]' 'drivers/staging/slicoss/\(gb\|oasis\)rcvucode\.h' + blob '#include[ ]["]\(gb\|oasis\)\(dbg\)\?\(download\|rcvucode\)\.h["]\([\n][\n]*#include[ ]["]\(gb\|oasis\)\(dbg\)\?\(download\|rcvucode\)\.h["]\)*' drivers/staging/slicoss/slicoss.c + blobna 'instruction[ ]=[ ][^;]*\(Oasis\|GB\|Mojave\)\(Rcv\)\?UCode[^:}]*[;]' drivers/staging/slicoss/slicoss.c + blobna 'seq_printf[(]seq[,][ ]["][^"]*%s[ ]%s[^"]*["][,][ \n]*\(GB_RCV\|MOJAVE_\)UCODE_VERS_STRING[,][ ]\(GB_RCV\|MOJAVE_\)UCODE_VERS_DATE[)][;]\([ \n]*seq_printf[(]seq[,][ ]["][^"]*%s[ ]%s[^"]*["][,][ \n]*\(GB_RCV\|MOJAVE_\)UCODE_VERS_STRING[,][ ]\(GB_RCV\|MOJAVE_\)UCODE_VERS_DATE[)][;]\)*' drivers/staging/slicoss/slicoss.c + blobna 'numsects[ ]=[ ][OM]NumSections[;][\n][ ]*for[ ][(][^;]*[;][^;]*[;][^;{]*[)][ ][{][\n][^}]*[\n][ ][ ][}]' drivers/staging/slicoss/slicoss.c + # post 2.6.29 patches defsnc 'static[ ]int[ ]atom_dst_to_src\[8\]\[4\][ ]=' drivers/gpu/drm/radeon/atom.c defsnc 'const[ ]unsigned[ ]char[ ]map_table\[\][ ]=' drivers/input/lirc/lirc_ttusbir.c @@ -2042,11 +2239,9 @@ set_except () { blobname '\(comedi[/]\)\?jr3pci\.idm' drivers/staging/comedi/drivers/jr3_pci.c blobname 'usbdux\(fast\)\?_firmware\.\(hex\|bin\)' 'drivers/staging/comedi/drivers/usbdux\(fast\)\?\.c' blobname 'RT30xxEEPROM\.bin' drivers/staging/rt3070/common/eeprom.c - blob '#include[ ]*["]\.\.[/]firmware.h["]' drivers/staging/rt3070/common/rtmp_init.c defsnc 'static[ ]const[ ]u8[ ]default_cal_\(channels\|rssi\)\[\][ ]=' drivers/staging/stlc45xx/stlc45xx.c accept '[ ][ ]stlc45xx_error[(]["]request_firmware[(][)][ ]failed' drivers/staging/stlc45xx/stlc45xx.c blob 'static[ ]struct[ ]phy_ucode[ ]PhyUcode\[\][ ]=[^;]*[;]' drivers/staging/sxg/sxgphycode-1.2.h - blob '#include[ ]["]sxgphycode\(-1\.2\)\?\.h["]' drivers/staging/sxg/sxg.c accept 'device[ ]drivers[ ]which[ ]predate[ ]the[ ]common[ ]use[ ]of[ ]request_firmware[(][)]' firmware/README.AddingFirmware accept 'As[ ]we[ ]update[ ]those[ ]drivers[ ]to[ ]use[ ]request_firmware[(][)]' firmware/README.AddingFirmware blob 'This[ ]directory[ ]is[ ]_NOT_[ ]for[ ]adding[ ]arbitrary[ ]new[ ]firmware[ ]images.*git[ ]pull[ ]request[ ]to:[\n][^\n]*infradead\.org>' firmware/README.AddingFirmware @@ -2057,7 +2252,7 @@ set_except () { blobname 'ositech[/]Xilinx7OD\.bin' drivers/net/pcmcia/smc91c92_cs.c blobname 'tehuti[/]\(firmware\|bdx\)\.bin' drivers/net/tehuti.c accept '[ ]*["]b43-open%s[/]%s\.fw["]' drivers/net/wireless/b43/main.c - blobname 'nx\(romimg\|3fw\(ct\|mn\)\)\.bin' 'drivers/net/netxen/netxen_nic_\(hw\|init\)\.c' + blobname '\(nx\(romimg\|3fw\(ct\|mn\)\)\|phanfw\)\.bin' 'drivers/net/netxen/netxen_nic\(_\(hw\|init\)\.c\|\.h\)' # New in 2.6.31 accept '[ ][*][ ]page[ ]tables[ ]as[ ]follows:[\n][ ][*][\n][ ][*][ ][ ][ ]3[ ]3[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[\n][ ][*][ ][ ][ ]1[ ]0[ ]9[ ]8[ ]7[ ]6[ ]5[ ]4[ ]3[ ]2[ ]1[ ]0[ ]9[ ]8[ ]7[ ]6[ ]5[ ]4[ ]3[ ]2[ ]1[ ]0[ ]9[ ]8[ ]7[ ]6[ ]5[ ]4[ ]3[ ]2[ ]1[ ]0' arch/arm/include/asm/pgtable.h @@ -2075,7 +2270,6 @@ set_except () { defsnc 'static[ ]\(u16\|struct[ ]i2c_reg_u16\)[ ]\(bridge\|mt9\(v\(11[12]\|011\)\|m001\)\)_init\[\]\(\[2\]\)\?[ ]=' drivers/media/video/gspca/sn9c20x.c defsnc 'static[ ]\(u8\|struct[ ]i2c_reg_u8\)[ ]\(soi968\|ov\(76[67]0\|965[05]\)\|hv7131r\)_init\[\]\(\[2\]\)\?[ ]=' drivers/media/video/gspca/sn9c20x.c defsnc 'static[ ]struct[ ]nand_ecclayout[ ]onenand_oob_128[ ]=' drivers/mtd/onenand/onenand_base.c - blobname 'bnx2x-e1h\?-\([0-9.%d]*\.fw\)\?' drivers/net/bnx2x_main.c blob '#define[ ]BCM_5710_FW_\(\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION\|COMPILE_FLAGS\)[ ]*[0-9]\+\([\n]#define[ ]BCM_5710_FW_\(\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION\|COMPILE_FLAGS\)[ ]*[0-9]\+\)*' drivers/net/bnx2x_hsi.h blob 'static[ ]int[ ]__devinit[ ]bnx2x_check_firmware[(]struct[ ]bnx2x[ ][*]bp[)][\n][{][^\n]*\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]' drivers/net/bnx2x_main.c blobna 'if[ ][(][(]fw_ver\[[0-3]\][ ]!=[ ]BCM_5710_FW_\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION[)]\([ ][|][|][\n][ ]*[(]fw_ver\[[0-3]\][ ]!=[ ]BCM_5710_FW_\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION[)]\)*[)][ ][{][^{}]*[}]' drivers/net/bnx2x_main.c @@ -2094,7 +2288,7 @@ set_except () { defsnc '\(static[ ]\)\?u32[ ]Rtl8192PciE\(PHY_REG\(_1T2R\)\?\|\(Radio[ABCD]\|MACPHY\|AGCTAB\)_\)Array\(_PG\)\?\(DTM\)\?\[\(\(PHY_REG\(_1T2R\)\?\|\(Radio[ABCD]\|MACPHY\|AGCTAB\)_\)Array\(_PG\)\?Length\(DTM\)\?\)\?\][ ]=' drivers/staging/rtl8192su/rtl8192S_FwImgDTM.h blob '\([&]\|sizeof[(]\)rtl8190_fw\(boot\|main\|data\)_array\(\[0\]\|[)]\)\(,[ \n]*\([&]\|sizeof[(]\)rtl8190_fw\(boot\|main\|data\)_array\(\[0\]\|[)]\)\)*' 'drivers/staging/rtl8192su/r819\(2S\|xU\)_firmware\.c' blobname 'RTL8192U[/]\(boot\|main\|data\)\.img' 'drivers/staging/rtl8192s\?u/r819xU_firmware\.c' - blob 'u8[ ]rtl8190_fw\(boot\|main\|data\)_array\[\][ ]=[ ][{][^}]*[}][;]' 'drivers/staging/rtl8192s\?u/r8192xU_firmware_img\.c' + blob 'u8[ ]rtl8190_fw\(boot\|main\|data\)_array\[\][ ]=[ ]\?[{][^}]*[}][;]' 'drivers/staging/rtl8192s\?u/r8192xU_firmware_img\.c' defsnc 'u32[ ]Rtl8192Usb\(PHY_REG\(_1T2R\)\?\|\(Radio[ABCD]\|MACPHY\|AGCTAB\)_\)Array\(_PG\)\?\[\][ ]=' drivers/staging/rtl8192su/rtl819xU_firmware_img.c defsnc 'BYTE[ ]\(sbox\|dot[23]\)_table\[256\][ ]=' drivers/staging/vt6655/aes_ccmp.c defsnc 'BYTE[ ]byVT3253\(InitTab\|B0\(_AGC4\?\)\?\)_\(RFMD\(2959\)\?\|AIROHA2230\|UW2451\|AGC\)\[CB_VT3253\(B0\(_AGC4\?\)\?\)\?\(\(_INIT\)\?_FOR_\(RFMD\(2959\)\?\|AIROHA2230\|UW2451\|AGC\)\)\?\]\[2\][ ]=' drivers/staging/vt6655/baseband.c @@ -2168,7 +2362,7 @@ set_except () { defsnc 'static[ ]const[ ]UINT32[ ]SHA256_K\[64\][ ]=' drivers/staging/rt3090/common/crpt_sha2.c defsnc '\(DOT11_REGULATORY_INFORMATION\|struct[ ]rt_dot11_regulatory_information\)[ ]\(USA\|Europe\|Japan\)RegulatoryInfo\[\][ ]=' 'drivers/staging/\(rt3090\|rt2860\)/common/spectrum\.c' defsnc 'static[ ]const[ ]USHORT[ ]Sbox\[256\][ ]=' drivers/staging/rt3090/sta/rtmp_ckipmic.c - blob '#include[ ]*["]\(\.\.[/]\(\.\.[/]rt30[79]0[/]\)\?\)\?firmware\.h["]' 'drivers/staging/rt\(28[67]\|309\)0/common/rtmp_\(init\|mcu\)\.c' + blob '#include[ ]*["]\(\.\.[/]\(\.\.[/]rt\(28[67]\|30[79]\)0[/]\(common[/]\)\?\)\?\)\?firmware\(_\(28[67]\|30[79]\)0\)\?\.h["]\([\n][\n]*#include[ ]*["]\(\.\.[/]\(\.\.[/]rt\(28[67]\|30[79]\)0[/]\(common[/]\)\?\)\?\)\?firmware\(_\(28[67]\|30[79]\)0\)\?\.h["]\)' 'drivers/staging/rt\(28[67]\|309\)0/common/rtmp_\(init\|mcu\)\.c' blobna 'FIRMWAREIMAGE_LENGTH[ ]==' drivers/staging/rt3090/common/rtmp_mcu.c defsnc 'int[ ]wm831x_isinkv_values\[WM831X_ISINK_MAX_ISEL[ ][+][ ][1]\][ ]=' drivers/mfd/wm831x-core.c defsnc 'static[ ]struct[ ]nand_ecclayout[ ]hwecc4_2048[ ]__initconst[ ]=' drivers/mtd/nand/davinci_nand.c @@ -2211,9 +2405,10 @@ set_except () { defsnc 'static[ ]struct[ ]nand_ecclayout[ ]nandv2_hw_eccoob_largepage[ ]=' drivers/mtd/nand/mxc_nand.c blob '#define[ ]FW_FILE_VERSION\([ ]*[\\][\n][ ]__stringify[(]BCM_5710_FW_\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION[)]\([ ]["][.]["]\)\?\)\+' drivers/net/bnx2x_main.c blobname 'bnx2x-e1h\?-["][ ]FW_FILE_VERSION[ ]["]\.fw' drivers/net/bnx2x_main.c - blob '#define[ ]FW_VERSION\([ ]__stringify[(]FW_VERSION_\(MAJOR\|MINOR\|MICRO\)[)]\([ ]["][.]["]\)\?\([ ]*[\\][\n]\)\?\)\+' drivers/net/cxgb3/cxgb3_main.c + blobname 'bnx2x-e1h\?-\([0-9.%d]*\.fw\)\?' drivers/net/bnx2x_main.c + blob '#define[ ]FW_VERSION\([ ]__stringify[(]FW_VERSION_\(MAJOR\|MINOR\|MICRO\)[)]\([ ]["][.]["]\)\?\([ ]*[\\][\n]\)\?\)\+' drivers/net/cxgb3/cxgb3_main.c blobname 'cxgb3[/]t3fw-["][ ]FW_VERSION[ ]["]\.bin' drivers/net/cxgb3/cxgb3_main.c - blob '#define[ ]TPSRAM_VERSION\([ ]__stringify[(]TP_VERSION_\(MAJOR\|MINOR\|MICRO\)[)]\([ ]["][.]["]\)\?\([ ]*[\\][\n]\)\?\)\+' drivers/net/cxgb3/cxgb3_main.c + blob '#define[ ]TPSRAM_VERSION\([ ]__stringify[(]TP_VERSION_\(MAJOR\|MINOR\|MICRO\)[)]\([ ]["][.]["]\)\?\([ ]*[\\][\n]\)\?\)\+' drivers/net/cxgb3/cxgb3_main.c blobname 'cxgb3[/]t3\(%c\|[bc]\)_psram-["][ ]TPSRAM_VERSION[ ]["]\.bin' drivers/net/cxgb3/cxgb3_main.c defsnc '[ ]static[ ]const[ ]u8[ ]rsshash\[40\][ ]=' drivers/net/igb/igb_main.c defsnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_302x\[\][ ]=' drivers/net/wireless/rt2x00/rt2800lib.c @@ -2229,6 +2424,7 @@ set_except () { blobname 'scope\.cod' 'sound/isa/\(Kconfig\|sscape\.c\)' blobname 'sndscape\.co\([?dx01234]\|%d\)' 'sound/isa/\(Kconfig\|sscape\.c\)' defsnc 'static[ ]const[ ]u8[ ]\(adcm1700\|om6802\|po1030\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c + blobname 'ath3k-1\.fw' drivers/bluetooth/ath3k.c ;; */*freedo*.patch | */*logo*.patch) @@ -2305,7 +2501,8 @@ set_except () { blob '#include[ ]*["]\(\.\.[/]\(\.\.[/]rt30[79]0[/]\)\?\)\?firmware\.h["]' 'drivers/staging/rt\(28[67]\|309\)0/common/rtmp_\(init\|mcu\)\.c' blob 'Derived[ ]from[ ]proprietary[ ]unpublished[ ]source[ ]code' drivers/net/tg3.c blobname 'atmel_at76c50\(2\([de]\|_3com\)\?\|4a\?\(_2958\)\?\|6\)\(\.bin\)\?' drivers/net/wireless/atmel.c - blobna '\(pFirmwareImage[ ]=[ ]\(FirmwareImage\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\)\?_LENGTH\)\)[;]\([\n ]*\(pFirmwareImage[ ]=[ ]\(FirmwareImage\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\)\?_LENGTH\)\)[;]\)*' 'drivers/staging/rt\(28[67]0\|30[79]0\)/common/rtmp_init\.c' + blobna '\(pFirmwareImage[ ]=\([ ]FirmwareImage\(_\(28[67]\|30[79]\)0\)\?\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\|_MAX\)\?_LENGTH\)\)[;]\([\n ]*\(pFirmwareImage[ ]=\([ ]FirmwareImage\(_\(28[67]\|30[79]\)0\)\?\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\|_MAX\)\?_LENGTH\)\)[;]\)*' 'drivers/staging/rt\(28[67]0\|30[79]0\)/common/rtmp_init\.c' + blobname '\(nx\(romimg\|3fw\(ct\|mn\)\)\|phanfw\)\.bin' 'drivers/net/netxen/netxen_nic\(_\(hw\|init\)\.c\|\.h\)' # The above are covered by the main Linux patterns. The patterns # below are to be kept in sync in the 2.6.33 block within the main # Linux patterns, until 2.6.33 is released. @@ -2349,6 +2546,7 @@ set_except () { blobname 'scope\.cod' 'sound/isa/\(Kconfig\|sscape\.c\)' blobname 'sndscape\.co\([?dx01234]\|%d\)' 'sound/isa/\(Kconfig\|sscape\.c\)' defsnc 'static[ ]const[ ]u8[ ]\(adcm1700\|om6802\|po1030\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c + blobname 'ath3k-1\.fw' drivers/bluetooth/ath3k.c ;; */patch*2.6.27*|*/patch*2.6.31.*) @@ -2391,13 +2589,12 @@ set_except () { blobname 'haup-ir-blaster\.bin' drivers/input/lirc/lirc_zilog.c # Non-Free license in entire file. - blob 'static[ ]unsigned[ ]char[ ]xilinx_firm\(_4610\)\?\[\][ ]=[ ][{]'"$sepx$blobpat*$sepx"'[}][;]' 'drivers/staging/me4000/me4\(00\|61\)0_firmware\.h' # CONFIG_ME4000 - - # Deblobbing needed. - blob 'static[ ]u8[ ]\(Mojave\|Oasis\)UCode\[2\]\[65536\][ ]='"$sepx$blobpat*$sepx"'[;]' 'drivers/staging/slicoss/\(gb\|oasis\(dbg\)\?\)download\.h' # CONFIG_SLICOSS - blob 'static[ ]u8[ ]\(GB\|Oasis\)RcvUCode\[2560\][ ]='"$sepx$blobpat*$sepx"'[;]' 'drivers/staging/slicoss/\(gb\|oasis\)rcvucode\.h' # CONFIG_SLICOSS - blob 'static[ ]unsigned[ ]char[ ]SaharaUCode\[2\]\[57972\][ ]='"$sepx$blobpat*$sepx"'[;]' drivers/staging/sxg/saharadbgdownload.h # CONFIG_SXG - blob 'static[ ]PHY_UCODE[ ]PhyUcode\[\][ ]=[^;]*[;]' drivers/staging/sxg/sxgphycode.h # CONFIG_SXG + blob 'static[ ]unsigned[ ]char[ ]xilinx_firm\(_4610\)\?\[\][ ]=[ ][{]'"$sepx$blobpat*$sepx"'[}][;]' 'drivers/staging/me4000/me4\(00\|61\)0_firmware\.h' + blob 'static[ ]struct[ ]PHY_UCODE[ ]PhyUcode\[\][ ]=[^;]*[;]' drivers/staging/sxg/sxgphycode.h + blob 'static[ ]unsigned[ ]char[ ]SaharaUCode\[2\]\[57972\][ ]=[^;]*[;]' drivers/staging/sxg/saharadbgdownload.h + blob '#include[ ]["]saharadbgdownload\.h["]' drivers/staging/sxg/sxg.c + blob 'static[ ]u8[ ]\(Mojave\|Oasis\)UCode\[2\]\[65536\][ ]=[^;]*[;]' 'drivers/staging/slicoss/\(gb\|oasis\(dbg\)\?\)download\.h' + blob 'static[ ]u8[ ]\(GB\|Oasis\)RcvUCode\[2560\][ ]=[^;]*[;]' 'drivers/staging/slicoss/\(gb\|oasis\)rcvucode\.h' # ok from earlier releases accept 'for[ ]i[ ]in[ ][ 0-9\\\n]*[\n]do' 'Documentation/specialix.txt|Documentation/serial/specialix.txt' @@ -2723,14 +2920,20 @@ set_except () { */linux-2.6-netdev-e1000e*.patch) initnc 'static[ ]const[ ]u16[ ]e1000_igp_2_cable_length_table\[\][ ]=' drivers/net/e1000e/phy.c ;; + + */deblob-check-testsuite/*) + accept 'accept[(][^)]*[)]' + blobname 'blob[(][^)]*[)]' + blobname 'blobeol[^\n]*[\n]' + ;; esac -} +} # Regular expression that matches a literal constant. constx="[0-9][0-9a-fA-FxX]*" # Regular expression that matches a separator between consecutive # literal constants. -sepx="\\([ \\n]*\\(\\([ \\n]\\|[,:{}LlUu\"\'\\\\][,:{} \\nLlUu\"\'\\\\]*\\)[xX\$]\\?\\|[.][a-zA-Z][a-zA-Z0-9]*[ ]\\+[\$]\\?\\)\\)" +sepx="\\([ \\n]*\\(\\([ \\n]\\|[,:{}LlUu\"\'\\\\][,:{} \\nLlUu\"\'\\\\]*\\)[xX\$]\\?\\|[.][a-zA-Z][a-zA-Z0-9]*[ ][ ]*[\$]\\?\\)\\)" # Regular expression that matches a continuation of a blob, after an # initial constant. *, \+ and \? can be safely appended to it without @@ -2986,7 +3189,7 @@ i\\ b print_blobs_output_false_positive } h -s/\\(\\($blobs[^\\n]*\\)\\+\\)\\([\\n].*\\)\\?$/\\1/ +s/\\($blobs\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/ $v:narrowed to blob p g @@ -3050,7 +3253,7 @@ i\\ b print_marked_blobs_output_false_positive } h -s/\\(\\($blobs[^\\n]*\\)\\+\\)\\([\\n].*\\)\\?$/\\1/ +s/\\($blobs\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/ $v:narrowed to blob # s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g s/$blobs/\/*(DEBLOBBED)*\//g @@ -3116,7 +3319,7 @@ i\\ b print_cblobs_output_false_positive } h -s/^\\($lblobctx[^\\n]*\\($blobs[^\\n]*\\)*\\)\\([\\n].*\\)\\?$/\\1/ +s/^\\($lblobctx\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/ $v:narrowed to blob p g @@ -3180,7 +3383,7 @@ i\\ b print_marked_cblobs_output_false_positive } h -s/^\\($lblobctx[^\\n]*\\($blobs[^\\n]*\\)*\\)\\([\\n].*\\)\\?$/\\1/ +s/^\\($lblobctx\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/ $v:narrowed to blob # s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g s/$blobs/\/*(DEBLOBBED)*\//g @@ -3215,7 +3418,7 @@ $v:print_both h i\\ ::: $file ::: -s/^\\(\\($falsepos[^\\n]*\\|[^\\n]*$blobs[^\\n]*\\)\\($blobs[^\\n]*\\)*\\)\\([\\n].*\\)\\?$/\\1/ +s/^\\(\\($falsepos\\|[^\\n]*$blobs\\)\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/ $v:narrowed to blob p g @@ -3308,7 +3511,7 @@ $v:list_blobs b list_blobs_delete_to_eol } h -s/\\(\\($blobs[^\\n]*\\)\\+\\)\\([\\n].*\\)\\?$/\\1/ +s/\\($blobs\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/ $v:narrowed to blob # s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g s/$blobs/\/*(DEBLOBBED)*\//g @@ -3341,7 +3544,7 @@ $v:list_both b list_both_delete_to_eol } h -s/^\\(\\($falsepos[^\\n]*\\|[^\\n]*$blobs[^\\n]*\\)\\($blobs[^\\n]*\\)*\\)\\([\\n].*\\)\\?$/\\1/ +s/^\\(\\($falsepos\\|[^\\n]*$blobs\\)\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/ $v:narrowed to blob # s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g s/$blobs/\/*(DEBLOBBED)*\//g @@ -3359,12 +3562,17 @@ b list_both scriptcmd='${SED-sed} -n -f "$scriptname"' + case $vp in + [01]) xv= ;; + 2) xv='# ';; + esac + sedunbreak=' : restart /[/][*](DEBLOB-$/ { N - /[/][*](DEBLOB-[\n]ERROR)[*][/]/{q 1;} - s,[/][*](DEBLOB-[\n]BED)[*][/],, + /[/][*](DEBLOB-[\n]ERROR)[*][/]/{q 1;}'" +$xv"'s,[/][*](DEBLOB-[\n]BED)[*][/],, b restart } p @@ -3378,7 +3586,7 @@ s,\\\([{(|)}?+]\),\1,g s,^\([-+]\)\(\^\?\)\(.*\)\(\$\?\)$,\2(?s:\3)\4\1,g s,[+]$, { falsepos (); }, s,[-]$, { blob (); }, -' +' echo '%%' > "$scriptname" ${SED-sed} "$adjust_rx" < "$regex_name" >> "$scriptname" @@ -3415,10 +3623,9 @@ with_context = 0 print_falsepos = 0 print_nomatch = 0 -# Should we print name_to_list and exit if we find blobs or false positives? +# Should we print the input stack if we find blobs or false positives? list_blob = 0 list_falsepos = 0 -name_to_list = '$input' # Should we forget everything we know about false positives? falsepos = None @@ -3449,7 +3656,7 @@ s,^\\(.*\\)\$,falsepos = r'(?P\\1)',;\ s,^\\(.*\\)\$,blob = r'(?P\\1)',;\ "' p;}' >> "$scriptname" - echo "\\($initblob\\|$defineblob\\|$asmblob\\)" | + echo "\\($initblob\\|$defineblob\\|$asmblob\\)" | ${SED-sed} -e "$adjust_rx" \ -e "s,^\\(.*\\)\$,cblob = r'(?P\\1)'," >> "$scriptname" @@ -3490,17 +3697,15 @@ for line in sys.stdin: assert filenames != None s += line continue - + if verbose: print 'looking for matches' sfilenames = filenames while filenames != None: - if filenames[0] == name_to_list: - print name_to_list - assert filenames[1] == None + if filenames[1] is None: + print filenames[0] else: print filenames[0] + ' within' - assert filenames[1] != None filenames = filenames[1] filenames = sfilenames @@ -3524,6 +3729,7 @@ for line in sys.stdin: if pend == 0: pend = len(s) p = match.start() + 1 + blob_p = 2 else: blob_p = what == 'blob' assert blob_p or what == 'falsepos' @@ -3534,7 +3740,7 @@ for line in sys.stdin: else: if verbose: print 'match is a false positive' falses += 1 - + if blob_p and replace_blob or not blob_p and replace_falsepos: s = s[:match.start(what)] + replacement + s[match.end(what):] p = match.start(what) + len(replacement) @@ -3549,7 +3755,9 @@ for line in sys.stdin: pend = len(s) match = rxc.search (s, p) - if match == None or match.start () >= pend: + if match is None or match.start () >= pend or \ + (blob_p and not print_blob and not falses) or \ + (not blob_p and not print_falsepos and not blobs): break if print_nomatch: @@ -3563,10 +3771,6 @@ for line in sys.stdin: sfilenames = filenames while filenames != None: print '::: ' + filenames[0] + ' :::' - if filenames[0] == name_to_list: - assert filenames[1] == None - else: - assert filenames[1] != None filenames = filenames[1] filenames = sfilenames sys.stdout.write (s[pp:pend]) @@ -3574,12 +3778,10 @@ for line in sys.stdin: if list_blob and blobs or list_falsepos and falses: while filenames != None: - if filenames[0] == name_to_list: - print name_to_list - assert filenames[1] == None - else: + if filenames[1] is None: print filenames[0] + ' within' - assert filenames[1] != None + else: + print filenames[0] filenames = filenames[1] exit (1) @@ -3593,7 +3795,7 @@ for line in sys.stdin: filenames = nextfilenames del nextfilenames -assert filenames == None +assert filenames is None exit (0) EOF @@ -3627,7 +3829,7 @@ my $with_context = 0; my $print_falsepos = 0; my $print_nomatch = 0; -# Should we print name_to_list and exit if we find blobs or false positives? +# Should we print the input stack and exit if we find blobs or false positives? my $list_blob = 0; my $list_falsepos = 0; @@ -3638,8 +3840,6 @@ my $no_falsepos = 0; EOF cat >> "$scriptname" <\\1)'ms;,;\ s,^\\(.*\\)\$,my \$blob = qr'(?\\1)'ms;,;\ "' p;}' >> "$scriptname" - echo "\\($initblob\\|$defineblob\\|$asmblob\\)" | + echo "\\($initblob\\|$defineblob\\|$asmblob\\)" | ${SED-sed} -e "$adjust_rx" \ -e "s,^\\(.*\\)\$,my \$cblob = qr'(?\\1)'ms if \$with_context;," >> "$scriptname" @@ -3697,7 +3897,7 @@ while () { $s .= $_; next; } - + if ($verbose) { print "looking for matches in\n"; for (my $i = $nfilenames; --$i > 0; ) { @@ -3739,6 +3939,7 @@ while () { $blobs++; print "match is a blob at $matchstart\n" if ($verbose); } else { + $blob_p = 2; $p = $matchstart; print "searching up to $pend\n" if $verbose; next; @@ -3758,7 +3959,10 @@ while () { print "searching up to $pend\n" if $verbose; $p--; }} while (($matchfound = (substr ($s, $p) =~ /(?<=.)$rx/mso)) - && ($matchstart = $-[0] + $p) < $pend); + && ($matchstart = $-[0] + $p) < $pend + && !($blob_p + ? (!$print_blob && !$falses) + : (!$print_falsepos && !$blobs))); print "last match before $pend\n" if $verbose; @@ -3790,7 +3994,7 @@ while () { } print substr ($s, $pp) if $print_nomatch; - + print "no further matches\n" if $verbose; $s = ''; @@ -3827,7 +4031,7 @@ s,\\\([{(|)}?+]\),\1,g; case " = $@ = " in *" = with_context = "*) cblob=` - $echo "\\($initblob\\|$defineblob\\|$asmblob\\)" | + $echo "\\($initblob\\|$defineblob\\|$asmblob\\)" | ${SED-sed} -e "$adjust_rx" `;; *) cblob='$.^';; @@ -3855,10 +4059,10 @@ BEGIN { print_falsepos = 0; print_nomatch = 0; - # Should we print name_to_list and exit if we find blobs or false positives? + # Should we print the input stack and exit if we find blobs or + # false positives? list_blob = 0; list_falsepos = 0; - name_to_list = "$input"; # Should we forget everything we know about false positives? no_falsepos = 0; @@ -3922,12 +4126,16 @@ $eormatch /^[;][/][*]end .*[*][/][;]$eornl$/ { print substr (s, matchstart + 1, matchlen - 1); } - cblob_p = 0; - if (match (substr (s, matchstart, matchlen), /^[\n]($falsepos)/) == 1) { - if (verbose) print "match is a false positive"; + matchlen = RLENGTH; + if (verbose) print "match is a false positive of length", matchlen; blob_p = 0; falses++; + } else if (match (substr (s, matchstart, matchlen), /^.($blob)/) == 1) { + matchlen = RLENGTH; + if (verbose) print "match is a blob of length", matchlen; + blob_p = 1; + blobs++; } else if (match (substr (s, matchstart, matchlen), /^[\n]($cblob)$/) == 1) { if (verbose) print "match is a blob context"; pend = index (substr (s, matchstart + matchlen), "\n"); @@ -3936,38 +4144,37 @@ $eormatch /^[;][/][*]end .*[*][/][;]$eornl$/ { else pend = length (s); p = matchstart + 1; - if (verbose) print "range is:", substr (s, p, pend - p); - cblob_p = 1; - } else { - if (verbose) print "match is a blob"; - blob_p = 1; - blobs++; + blob_p = 2; + if (verbose > 1) print "range is:", substr (s, p, pend - p); } - if (!cblob_p) { + if (blob_p < 2) { if (blob_p ? replace_blob : replace_falsepos) { s = substr (s, 1, matchstart) \\ replacement \\ substr (s, matchstart + matchlen); p = matchstart + length (replacement) - 1; - pend += (p + 2 - matchstart - matchlen); + pend += (p + 1 - matchstart - matchlen); } else p = matchstart + matchlen - 1; - if (p > pend) { - i = index (substr (s, p), "\n"); + if (p >= pend) { + i = index (substr (s, p + 1), "\n"); if (i) - pend = p + i; + pend = p + 1 + i; else pend = length (s) } } - + if (verbose) print "search until", pend; if (!(matchfound = match (substr (s, p), /[\n]($falsepos)|[\n]($cblob)|.($blob)/)) || - p + RSTART >= pend) + p + RSTART >= pend || + (blob_p ? + (!print_blob && !falses) : + (!print_falsepos && !blobs))) break; } @@ -4020,7 +4227,7 @@ s,\\\([{(|)}?+]\),\1,g s,^\([-+]\)\(\^\?\)\(.*\)\(\$\?\)$,\2(?s:\3)\4\1,g s,[+]$, { falsepos (); }, s,[-]$, { blob (); }, -' +' echo '%%' > "$scriptname" ${SED-sed} "$adjust_rx" < "$regex_name" >> "$scriptname" @@ -4237,7 +4444,7 @@ BAD regular expression: s,^.*$,;/*begin &*/;\\n;/*&*/;,; p; d; - } + } s,^[ !$s],,;" cmd='${SED-sed} "$sedpatch"' ;; @@ -4334,7 +4541,7 @@ do continue ;; esac - + # If we print anything whatsoever (even a blank line) while # processing it, we've failed. if check "$file"; then