Parse uWSGI vars block into key-value pairs. Format: key_size (2 bytes LE) + key + val_size (2 bytes LE) + value
(self, data)
| 118 | return unreader.read(size) |
| 119 | |
| 120 | def _parse_vars(self, data): |
| 121 | """Parse uWSGI vars block into key-value pairs. |
| 122 | |
| 123 | Format: key_size (2 bytes LE) + key + val_size (2 bytes LE) + value |
| 124 | """ |
| 125 | pos = 0 |
| 126 | var_count = 0 |
| 127 | |
| 128 | while pos < len(data): |
| 129 | if var_count >= MAX_UWSGI_VARS: |
| 130 | raise InvalidUWSGIHeader("too many variables") |
| 131 | |
| 132 | # Key size (2 bytes, little-endian) |
| 133 | if pos + 2 > len(data): |
| 134 | raise InvalidUWSGIHeader("truncated key size") |
| 135 | key_size = int.from_bytes(data[pos:pos + 2], 'little') |
| 136 | pos += 2 |
| 137 | |
| 138 | # Key |
| 139 | if pos + key_size > len(data): |
| 140 | raise InvalidUWSGIHeader("truncated key") |
| 141 | key = data[pos:pos + key_size].decode('latin-1') |
| 142 | pos += key_size |
| 143 | |
| 144 | # Value size (2 bytes, little-endian) |
| 145 | if pos + 2 > len(data): |
| 146 | raise InvalidUWSGIHeader("truncated value size") |
| 147 | val_size = int.from_bytes(data[pos:pos + 2], 'little') |
| 148 | pos += 2 |
| 149 | |
| 150 | # Value |
| 151 | if pos + val_size > len(data): |
| 152 | raise InvalidUWSGIHeader("truncated value") |
| 153 | value = data[pos:pos + val_size].decode('latin-1') |
| 154 | pos += val_size |
| 155 | |
| 156 | self.uwsgi_vars[key] = value |
| 157 | var_count += 1 |
| 158 | |
| 159 | def _extract_request_info(self): |
| 160 | """Extract HTTP request info from uWSGI vars. |
no test coverage detected