Bug ID 1407885: An iRule containing HTTP_REQUEST event throws the TCL error invoked from within "HTTP::path when trying to process a non-valid HTTP request.

Last Modified: Jul 11, 2024

Affected Product(s):
BIG-IP Install/Upgrade, LTM(all modules)

Known Affected Versions:
15.1.0, 15.1.0.1, 15.1.0.2, 15.1.0.3, 15.1.0.4, 15.1.0.5, 15.1.1, 15.1.2, 15.1.2.1, 15.1.3, 15.1.3.1, 15.1.4, 15.1.4.1, 15.1.5, 15.1.5.1, 15.1.6, 15.1.6.1, 15.1.7, 15.1.8, 15.1.8.1, 15.1.8.2, 15.1.9, 15.1.9.1, 15.1.10, 15.1.10.2, 15.1.10.3, 15.1.10.4

Opened: Nov 29, 2023

Severity: 3-Major

Symptoms

After upgrade from v14 to v15, an iRule containing the HTTP_REQUEST event containing HTTP::Path throws a TCL error when trying to process a non-valid HTTP request. 01220001:3: TCL error: /BPUB-DEV/bpub_route <HTTP_REQUEST> - ERR_VAL (line 2) invoked from within "HTTP::path" +++++++++++

Impact

iRule execution fails with a TCL error.

Conditions

1) Use BIG-IP versions from v15 2) Use HTTP::Path in HTTP_REQUEST event in an iRule. 3) Send some non-valid HTTP REQUEST traffic from a client

Workaround

1) Add "-normalized" command option to HTTP::path command. ltm rule /Common/test-rule-normalized { when HTTP_REQUEST { if { [HTTP::path -normalized] contains "test" } { HTTP::respond 200 -content "OK !!!\n" } else { HTTP::respond 200 -content "Hit \"else\" statement !!!\n" } } } Note: Adding "-normalized" command option may change the URI, so testing and verification before applying workaround on production environment is strongly recommended. 2) Use catch command in the iRule to see the error in ltm log. Ex: when HTTP_REQUEST { if {[HTTP::has_responded]} {return} catch { if {[class match [HTTP::path ] equals /BPUB-DEV/bpub_opns]}{ return } } catch_err if { $catch_err ne ""} { # log local0. "Catch_err: $catch_err" log local0. "HTTP Request: [HTTP::request]" drop } }

Fix Information

None

Behavior Change

Guides & references

K10134038: F5 Bug Tracker Filter Names and Tips