mcstatus: IndexError: bytearray index out of range

This happens for example using JavaServer.lookup() with the following ip: 135.148.100.83:25572

Traceback:

Traceback (most recent call last):
  File "/root/ServerSeeker/scan.py", line 42, in scan_chunk
    status = JavaServer.lookup(f"{ip}:{port}").status()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/server.py", line 128, in status
    return self._retry_status(connection, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/utils.py", line 66, in sync_wrapper
    raise last_exc  # type: ignore # (This won't actually be unbound)
    ^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/utils.py", line 62, in sync_wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/server.py", line 134, in _retry_status
    result = pinger.read_status()
             ^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/pinger.py", line 116, in read_status
    if response.read_varint() != 0:
       ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/protocol/connection.py", line 254, in read_varint
    part = self.read(1)[0]
           ~~~~~~~~~~~~^^^
IndexError: bytearray index out of range

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 28 (28 by maintainers)

Commits related to this issue

Most upvoted comments

Worked!

[Scanner]     14:43:53: Traceback:
Traceback (most recent call last):
  File "/root/ServerSeeker/scan.py", line 43, in scan_chunk
    status = JavaServer.lookup(f"{ip}:{port}").status()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/server.py", line 130, in status
    return self._retry_status(connection, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/utils.py", line 67, in sync_wrapper
    raise last_exc  # type: ignore # (This won't actually be unbound)
    ^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/utils.py", line 63, in sync_wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/server.py", line 136, in _retry_status
    result = pinger.read_status()
             ^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/pinger.py", line 52, in read_status
    raw = json.loads(response.read_utf())
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/protocol/connection.py", line 270, in read_utf
    length = self.read_varint()
             ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/protocol/connection.py", line 248, in read_varint
    part = self.read(1)[0]
           ^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mcstatus/protocol/connection.py", line 452, in read
    raise IndexError(f"Not enough data to read! {len(self.received)} < {length}")
IndexError: Not enough data to read! 0 < 1

Can you also try to catch the error with code from #512?

pip install git+https://github.com/py-mine/mcstatus.git@raise-better-error-if-server-returns-not-a-full-answer