@@ -138,7 +138,6 @@ window.ProbeRender = (function () {
138138 'SMUG-CLTE-PIPELINE' : '/Http11Probe/docs/smuggling/clte-pipeline/' ,
139139 'SMUG-EXPECT-100-CL' : '/Http11Probe/docs/smuggling/expect-100-cl/' ,
140140 'SMUG-HEAD-CL-BODY' : '/Http11Probe/docs/smuggling/head-cl-body/' ,
141- 'SMUG-HEADER-INJECTION' : '/Http11Probe/docs/smuggling/header-injection/' ,
142141 'SMUG-OPTIONS-CL-BODY' : '/Http11Probe/docs/smuggling/options-cl-body/' ,
143142 'SMUG-TE-CASE-MISMATCH' : '/Http11Probe/docs/smuggling/te-case-mismatch/' ,
144143 'SMUG-TE-DOUBLE-CHUNKED' : '/Http11Probe/docs/smuggling/te-double-chunked/' ,
@@ -155,7 +154,38 @@ window.ProbeRender = (function () {
155154 'SMUG-TRAILER-CL' : '/Http11Probe/docs/smuggling/trailer-cl/' ,
156155 'SMUG-TRAILER-HOST' : '/Http11Probe/docs/smuggling/trailer-host/' ,
157156 'SMUG-TRAILER-TE' : '/Http11Probe/docs/smuggling/trailer-te/' ,
158- 'SMUG-TRANSFER_ENCODING' : '/Http11Probe/docs/smuggling/transfer-encoding-underscore/'
157+ 'SMUG-TRANSFER_ENCODING' : '/Http11Probe/docs/smuggling/transfer-encoding-underscore/' ,
158+ 'COMP-CHUNKED-HEX-UPPERCASE' : '/Http11Probe/docs/body/chunked-hex-uppercase/' ,
159+ 'COMP-CHUNKED-TRAILER-VALID' : '/Http11Probe/docs/body/chunked-trailer-valid/' ,
160+ 'COMP-CONNECTION-CLOSE' : '/Http11Probe/docs/headers/connection-close/' ,
161+ 'COMP-CONNECT-ORIGIN-FORM' : '/Http11Probe/docs/request-line/connect-origin-form/' ,
162+ 'COMP-HOST-EMPTY-VALUE' : '/Http11Probe/docs/host-header/host-empty-value/' ,
163+ 'COMP-HTTP10-DEFAULT-CLOSE' : '/Http11Probe/docs/headers/http10-default-close/' ,
164+ 'COMP-HTTP10-NO-HOST' : '/Http11Probe/docs/host-header/http10-no-host/' ,
165+ 'COMP-HTTP12-VERSION' : '/Http11Probe/docs/request-line/http12-version/' ,
166+ 'COMP-METHOD-TRACE' : '/Http11Probe/docs/request-line/method-trace/' ,
167+ 'COMP-REQUEST-LINE-TAB' : '/Http11Probe/docs/request-line/request-line-tab/' ,
168+ 'COMP-TRACE-WITH-BODY' : '/Http11Probe/docs/request-line/trace-with-body/' ,
169+ 'COMP-VERSION-LEADING-ZEROS' : '/Http11Probe/docs/request-line/version-leading-zeros/' ,
170+ 'COMP-VERSION-MISSING-MINOR' : '/Http11Probe/docs/request-line/version-missing-minor/' ,
171+ 'COMP-VERSION-WHITESPACE' : '/Http11Probe/docs/request-line/version-whitespace/' ,
172+ 'MAL-POST-CL-HUGE-NO-BODY' : '/Http11Probe/docs/malformed-input/post-cl-huge-no-body/' ,
173+ 'MAL-RANGE-OVERLAPPING' : '/Http11Probe/docs/malformed-input/range-overlapping/' ,
174+ 'MAL-URL-BACKSLASH' : '/Http11Probe/docs/malformed-input/url-backslash/' ,
175+ 'MAL-URL-OVERLONG-UTF8' : '/Http11Probe/docs/malformed-input/url-overlong-utf8/' ,
176+ 'MAL-URL-PERCENT-CRLF' : '/Http11Probe/docs/malformed-input/url-percent-crlf/' ,
177+ 'MAL-URL-PERCENT-NULL' : '/Http11Probe/docs/malformed-input/url-percent-null/' ,
178+ 'SMUG-ABSOLUTE-URI-HOST-MISMATCH' : '/Http11Probe/docs/smuggling/absolute-uri-host-mismatch/' ,
179+ 'SMUG-CHUNK-BARE-CR-TERM' : '/Http11Probe/docs/smuggling/chunk-bare-cr-term/' ,
180+ 'SMUG-CL-DOUBLE-ZERO' : '/Http11Probe/docs/smuggling/cl-double-zero/' ,
181+ 'SMUG-CL-LEADING-ZEROS-OCTAL' : '/Http11Probe/docs/smuggling/cl-leading-zeros-octal/' ,
182+ 'SMUG-CL-NEGATIVE-ZERO' : '/Http11Probe/docs/smuggling/cl-negative-zero/' ,
183+ 'SMUG-CL-UNDERSCORE' : '/Http11Probe/docs/smuggling/cl-underscore/' ,
184+ 'SMUG-MULTIPLE-HOST-COMMA' : '/Http11Probe/docs/smuggling/multiple-host-comma/' ,
185+ 'SMUG-TE-OBS-FOLD' : '/Http11Probe/docs/smuggling/te-obs-fold/' ,
186+ 'SMUG-TE-TAB-BEFORE-VALUE' : '/Http11Probe/docs/smuggling/te-tab-before-value/' ,
187+ 'SMUG-TE-TRAILING-COMMA' : '/Http11Probe/docs/smuggling/te-trailing-comma/' ,
188+ 'SMUG-TRAILER-CONTENT-TYPE' : '/Http11Probe/docs/smuggling/trailer-content-type/'
159189 } ;
160190
161191 function testUrl ( tid ) {
@@ -202,8 +232,8 @@ window.ProbeRender = (function () {
202232 var s = sv . summary ;
203233 var total = s . total || 1 ;
204234 var warnings = s . warnings || 0 ;
205- var failed = total - s . passed - warnings ;
206- var passPct = ( s . passed / total ) * 100 ;
235+ var failed = s . failed || 0 ;
236+ var passPct = ( ( total - warnings - failed ) / total ) * 100 ;
207237 var warnPct = ( warnings / total ) * 100 ;
208238 var failPct = ( failed / total ) * 100 ;
209239 var rank = i + 1 ;
@@ -354,14 +384,30 @@ window.ProbeRender = (function () {
354384 injectScrollStyle ( ) ;
355385 var el = document . getElementById ( targetId ) ;
356386 if ( ! el ) return ;
357- var html = '' ;
387+
388+ // Find tests in this category that aren't in any explicit group
389+ var grouped = { } ;
358390 groups . forEach ( function ( g ) {
391+ g . testIds . forEach ( function ( tid ) { grouped [ tid ] = true ; } ) ;
392+ } ) ;
393+ var allCatTests = ctx . testIds . filter ( function ( tid ) {
394+ return ctx . lookup [ ctx . names [ 0 ] ] [ tid ] && ctx . lookup [ ctx . names [ 0 ] ] [ tid ] . category === categoryKey ;
395+ } ) ;
396+ var ungrouped = allCatTests . filter ( function ( tid ) { return ! grouped [ tid ] ; } ) ;
397+
398+ var allGroups = groups . slice ( ) ;
399+ if ( ungrouped . length > 0 ) {
400+ allGroups . push ( { key : 'other' , label : 'Other' , testIds : ungrouped } ) ;
401+ }
402+
403+ var html = '' ;
404+ allGroups . forEach ( function ( g ) {
359405 var divId = targetId + '-' + g . key ;
360406 html += '<h3 style="margin-top:1.5em;margin-bottom:0.3em;">' + g . label + '</h3>' ;
361407 html += '<div id="' + divId + '"></div>' ;
362408 } ) ;
363409 el . innerHTML = html ;
364- groups . forEach ( function ( g ) {
410+ allGroups . forEach ( function ( g ) {
365411 var divId = targetId + '-' + g . key ;
366412 renderTable ( divId , categoryKey , ctx , g . testIds ) ;
367413 } ) ;
0 commit comments