https://bugs.kde.org/show_bug.cgi?id=514195

            Bug ID: 514195
           Summary: Application becomes unresponsive when searching for
                    rare words in a large file (>2.4 GB)
    Classification: Applications
           Product: kate
      Version First 25.12.0
       Reported In:
          Platform: Arch Linux
                OS: Linux
            Status: REPORTED
          Severity: minor
          Priority: NOR
         Component: search
          Assignee: [email protected]
          Reporter: [email protected]
  Target Milestone: ---

Application becomes unresponsive when searching for rare words in a large file
(>2.4 GB)

SUMMARY
When attempting to search for a word that appears only once or twice in a large
file (>2.4 GB, based on my testing), the application becomes unresponsive (UI
freezes) for some time (depends on a file size, 20-60sec on my machine, 2.5gb
txt file).

STEPS TO REPRODUCE
1. Open the large file in Kate
2. Search for a word that dosent appear a lot
3. Observe UI freeze

OBSERVED RESULT
UI becomes unresponsive

EXPECTED RESULT
UI should remain responsive, and/or show progress

SOFTWARE/OS VERSIONS
- Kate 25.12.0-1 from the official Arch Linux repository (Arch Linux)
- Kate built from source on 2026-01-02 (Arch Linux)
- Kate 25.12.0 from the Fedora repository (Fedora Linux 43)

ADDITIONAL INFORMATION
To reproduce the issue, I created synthetic test data using a simple Python
script:
```python
import random
import string
import os

OUTPUT_FILE = "large_test_file_2-5gb.txt"
FILE_SIZE_IN_GB = 2.5

TARGET_SIZE_BYTES = int(FILE_SIZE_IN_GB * pow(1024, 3))
CHUNK_SIZE = pow(1024, 2)
MIN_WORD_LEN = 3
MAX_WORD_LEN = 12
WORDS_PER_LINE = 1000

def generate_chunk(target_bytes):
    lines = []
    size = 0

    while size < target_bytes:
        line_words = (''.join(random.choices(string.ascii_lowercase,
k=random.randint(MIN_WORD_LEN, MAX_WORD_LEN))) for _ in range(WORDS_PER_LINE))
        line = " ".join(line_words) + "\n"
        lines.append(line)
        size += len(line)

    return "".join(lines)

def create_file():
    print("Program started!")
    written = 0

    with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
        while written < TARGET_SIZE_BYTES:
            remaining = TARGET_SIZE_BYTES - written
            chunk_size = min(CHUNK_SIZE, remaining)

            chunk = generate_chunk(chunk_size)
            f.write(chunk)
            written += len(chunk.encode("utf-8"))

            if written % (100 * 1024 * 1024) < CHUNK_SIZE:
                print(f"Written: {written / (1024**3):.2f} GB")

    print("Program done!")
    print("Final size:", os.path.getsize(OUTPUT_FILE))

create_file() 
```

I’ll try to look into this problem to understand what’s wrong. If you have any
suggestions on how to solve it, I’d really appreciate hearing them.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to