Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.12.2 Forge: SevTech Ages advancements crashes StringError("stream did not contain valid UTF-8") #148

Closed
iceiix opened this issue May 12, 2019 · 5 comments
Labels
bug Something isn't working

Comments

@iceiix
Copy link
Owner

iceiix commented May 12, 2019

SevTech_Ages_Server_3.1.1 (1.12.2, top 3 on Curseforge)

crashes on login:
packet = Some(PluginMessageClientbound(PluginMessageClientbound { channel: "thebetweenlands", data: [17, 0, 0, 0, 18, 0, 0, 0, 16, 10, 0, 0, 0] }))
Decompressed threshold=256 len=2352 uncompressed_size=14939 to 14939 bytes
about to parse id=4d, dir=Clientbound state=Play
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 14, 0, 0, 0, 11, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 16, 0, 0, 0, 12, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 15, 0, 0, 0, 20, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 17, 0, 0, 0, 13, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 8, 0, 0, 0, 16, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 8, 0, 0, 0, 15, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 11, 0, 0, 0, 11, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 8, 0, 0, 0, 17, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 15, 0, 0, 0, 11, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 18, 0, 0, 0, 16, 10, 0, 0, 0]
thread 'main' panicked at 'Err: IOError(Custom { kind: InvalidData, error: StringError("stream did not contain valid UTF-8") })', src/server/mod.rs:449:33

Found in #146 1.12.2/1.10.2 Forge: Beyond/Skyfactory3/SevTech Ages crashes: error: StringError("failed to fill whole buffer") / java.util.zip.DataFormatException: incorrect header check, which extends #144 Forge 1.8.9-1.12.2 handshake protocol support. 1.12.2 protocol: https://wiki.vg/index.php?title=Protocol&oldid=14204

Full backtrace:

thread 'main' panicked at 'Err: IOError(Custom { kind: InvalidData, error: StringError("stream did not contain valid UTF-8") })', src/server/mod.rs:449:33
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:39
   1: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:70
   2: std::panicking::default_hook::{{closure}}
             at src/libstd/sys_common/backtrace.rs:58
             at src/libstd/panicking.rs:200
   3: std::panicking::default_hook
             at src/libstd/panicking.rs:215
   4: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
             at src/libstd/panicking.rs:478
   5: std::panicking::continue_panic_fmt
             at src/libstd/panicking.rs:385
   6: std::panicking::try::do_call
             at src/libstd/panicking.rs:340
   7: stevenarella::server::Server::entity_tick
             at src/server/mod.rs:449
   8: stevenarella::server::Server::tick
             at src/server/mod.rs:356
   9: stevenarella::main
             at src/main.rs:326
  10: std::rt::lang_start::{{closure}}
             at /rustc/fc50f328b0353b285421b8ff5d4100966387a997/src/libstd/rt.rs:64
  11: std::panicking::try::do_call
             at src/libstd/rt.rs:49
             at src/libstd/panicking.rs:297
  12: panic_unwind::dwarf::eh::read_encoded_pointer
             at src/libpanic_unwind/lib.rs:87
  13: std::panicking::update_count_then_panic
             at src/libstd/panicking.rs:276
             at src/libstd/panic.rs:388
             at src/libstd/rt.rs:48
  14: std::rt::lang_start
             at /rustc/fc50f328b0353b285421b8ff5d4100966387a997/src/libstd/rt.rs:64
@iceiix
Copy link
Owner Author

iceiix commented May 12, 2019

Packet 0x4d is Advancements: https://wiki.vg/index.php?title=Protocol&oldid=14204#Advancements

last-packet 'M\x015\x12triumph:stage0/mat\x01\x16triumph:stage0/leather\x01-{"translate":"advancements.stage0.mat.title"}3{"translate":"advancements.stage0.mat.description"}%\x05\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00A%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x15triumph:stage0/melter\x01\x19triumph:stage0/melterbase\x010{"translate":"advancements.stage0.melter.title"}6{"translate":"advancements.stage0.melter.description"}!\xa2\x01\x00\x00\x00\x01\x00\x00\x00\nA \x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x0fcompletedParent\x07hasRock\x08hasRock2\x02\x01\x0fcompletedParent\x02\x07hasRock\x08hasRock2\x1dtriumph:stage0/naturescompass\x01\x18triumph:stage0/workstump\x018{"translate":"advancements.stage0.naturescompass.title"}>{"translate":"advancements.stage0.naturescompass.description"}\x1d|\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00@4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/abyssalgem\x01\x1btriumph:stage0/abyssalbiome\x014{"translate":"advancements.stage0.abyssalgem.title"}:{"translate":"advancements.stage0.abyssalgem.description"}##\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00@4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/firstbreak\x01\x18triumph:stage0/firsttool\x014{"translate":"advancements.stage0.firstbreak.title"}:{"translate":"advancements.stage0.firstbreak.description"}\x00\x11\x01\x00\x00\x00\x02\x00\x00\x00\n@\x00\x00\x00@\xa0\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(\nbrokeLog16\nbrokeLog38\nbrokeLog17\nbrokeLog39\nbrokeLog18\nbrokeLog19\x0fcompletedParent\tbrokeLog1\tbrokeLog2\tbrokeLog9\nbrokeLog30\nbrokeLog31\tbrokeLog7\nbrokeLog10\nbrokeLog32\tbrokeLog8\nbrokeLog11\nbrokeLog33\tbrokeLog5\nbrokeLog12\nbrokeLog34\tbrokeLog6\nbrokeLog13\nbrokeLog35\tbrokeLog3\nbrokeLog14\nbrokeLog36\tbrokeLog4\nbrokeLog15\nbrokeLog37\nbrokeLog27\nbrokeLog28\nbrokeLog29\nbrokeLog40\nbrokeLog20\nbrokeLog21\nbrokeLog22\nbrokeLog23\nbrokeLog25\nbrokeLog26\x02\x01\x0fcompletedParent\'\nbrokeLog16\nbrokeLog38\nbrokeLog17\nbrokeLog39\nbrokeLog18\nbrokeLog19\tbrokeLog1\tbrokeLog2\tbrokeLog9\nbrokeLog30\nbrokeLog31\tbrokeLog7\nbrokeLog10\nbrokeLog32\tbrokeLog8\nbrokeLog11\nbrokeLog33\tbrokeLog5\nbrokeLog12\nbrokeLog34\tbrokeLog6\nbrokeLog13\nbrokeLog35\tbrokeLog3\nbrokeLog14\nbrokeLog36\tbrokeLog4\nbrokeLog15\nbrokeLog37\nbrokeLog27\nbrokeLog28\nbrokeLog29\nbrokeLog40\nbrokeLog20\nbrokeLog21\nbrokeLog22\nbrokeLog23\nbrokeLog25\nbrokeLog26\x15triumph:stage0/saddle\x01\x13triumph:stage0/lead\x010{"translate":"advancements.stage0.saddle.title"}6{"translate":"advancements.stage0.saddle.description"}\x01I\x01\x00\x00\x00\x00\x00\x00\x00\nA\x00\x00\x00@\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/melterbase\x01\x1atriumph:stage0/flamehopper\x014{"translate":"advancements.stage0.melterbase.title"}:{"translate":"advancements.stage0.melterbase.description"}!\xa2\x01\x00\x08\x00\x02\x00\x00\x00\nA\x10\x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x0fcompletedParent\x07hasRock\x08hasRock2\x02\x01\x0fcompletedParent\x02\x07hasRock\x08hasRock2\x1btriumph:stage0/fluidbladder\x01\x18triumph:stage0/workstump\x016{"translate":"advancements.stage0.fluidbladder.title"}<{"translate":"advancements.stage0.fluidbladder.description"}"\x11\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00A\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x16triumph:stage0/buffalo\x01\x16triumph:stage0/totemic\x011{"translate":"advancements.stage0.buffalo.title"}7{"translate":"advancements.stage0.buffalo.description"}!\xdd\x01\x00\x00\x00\x00\x00\x00\x00\nA\x00\x00\x00A\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x16triumph:stage0/totemic\x01\x16triumph:stage0/leather\x011{"translate":"advancements.stage0.totemic.title"}7{"translate":"advancements.stage0.totemic.description"}!\xcf\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00A\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x0fcompletedParent\x07hasRock\x08hasRock2\x08hasRock3\x04\x01\x0fcompletedParent\x01\x07hasRock\x01\x08hasRock2\x01\x08hasRock3\x1atriumph:stage0/flamehopper\x01\x1atriumph:stage0/woodhopper2\x015{"translate":"advancements.stage0.flamehopper.title"};{"translate":"advancements.stage0.flamehopper.description"}"$\x01\x00\x00\x00\x02\x00\x00\x00\nA\x00\x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x17triumph:stage0/farmland\x01\x18triumph:stage0/workblade\x012{"translate":"advancements.stage0.farmland.title"}8{"translate":"advancements.stage0.farmland.description"}\x00<\x01\x00\x00\x00\x00\x00\x00\x00\n@\x80\x00\x00?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x06traded\x02\x01\x0fcompletedParent\x01\x06traded\x18triumph:stage0/workstump\x01\x1btriumph:stage0/collectplank\x013{"translate":"advancements.stage0.workstump.title"}9{"translate":"advancements.stage0.workstump.description"}"&\x01\x00\x00\x00\x01\x00\x00\x00\n@\x80\x00\x00@\xa0\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07crafted\x02\x01\x0fcompletedParent\x01\x07crafted\x1ftriumph:stage0/lowgradecharcoal\x01\x13triumph:stage0/kiln\x01:{"translate":"advancements.stage0.lowgradecharcoal.title"}@{"translate":"advancements.stage0.lowgradecharcoal.description"}"\x1f\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00?\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1atriumph:stage0/woodhopper1\x01\x19triumph:stage0/firstchest\x015{"translate":"advancements.stage0.woodhopper1.title"};{"translate":"advancements.stage0.woodhopper1.description"}\x11\x14\x01\x00\x00\x00\x02\x00\x00\x00\n@\xc0\x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1atriumph:stage0/woodhopper2\x01\x1atriumph:stage0/woodhopper1\x015{"translate":"advancements.stage0.woodhopper2.title"};{"translate":"advancements.stage0.woodhopper2.description"}"#\x01\x00\x00\x00\x02\x00\x00\x00\n@\xe0\x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/lead\x01\x16triumph:stage0/leather\x01.{"translate":"advancements.stage0.lead.title"}4{"translate":"advancements.stage0.lead.description"}\x01\xa4\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00@\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/firsttool\x01\x13triumph:stage0/root\x013{"translate":"advancements.stage0.firsttool.title"}9{"translate":"advancements.stage0.firsttool.description"}!\x07\x01\x00\x00\x00\x02\x00\x00\x00\n?\x80\x00\x00@\xab\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/fish\x01\x14triumph:stage0/spear\x01.{"translate":"advancements.stage0.fish.title"}4{"translate":"advancements.stage0.fish.description"}\x01]\x01\x00\x00\x00\x00\x00\x00\x00\n@\x80\x00\x00@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x0ckilled_fish3\x0ckilled_fish2\x0bkilled_fish\x0ckilled_fish4\x0fcompletedParent\x02\x01\x0fcompletedParent\x04\x0ckilled_fish3\x0ckilled_fish2\x0bkilled_fish\x0ckilled_fish4\x14triumph:stage0/fiber\x01\x13triumph:stage0/root\x01/{"translate":"advancements.stage0.fiber.title"}5{"translate":"advancements.stage0.fiber.description"} b\x01\x00\x00\x00\x00\x00\x00\x00\n?\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x16triumph:stage0/firepit\x01\x13triumph:stage0/fire\x011{"translate":"advancements.stage0.firepit.title"}7{"translate":"advancements.stage0.firepit.description"}&\xe7\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/tipi\x01\x16triumph:stage0/leather\x01.{"translate":"advancements.stage0.tipi.title"}4{"translate":"advancements.stage0.tipi.description"}!\xd1\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00A\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1btriumph:stage0/collectplank\x01\x19triumph:stage0/firstbreak\x016{"translate":"advancements.stage0.collectplank.title"}<{"translate":"advancements.stage0.collectplank.description"}\x1b$\x01\x00\x00\x00\x02\x00\x00\x00\n@@\x00\x00@\xa0\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07crafted\x02\x01\x0fcompletedParent\x01\x07crafted\x16triumph:stage0/upgrade\x01\x18triumph:stage0/firsttool\x011{"translate":"advancements.stage0.upgrade.title"}7{"translate":"advancements.stage0.upgrade.description"} \xf1\x01\x00\x00\x00\x00\x00\x00\x00\n@\x00\x00\x00?\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/saltflats\x01\x14triumph:stage0/grill\x013{"translate":"advancements.stage0.saltflats.title"}9{"translate":"advancements.stage0.saltflats.description"} W\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x0fcompletedParent\x08hasRock2\x08hasRock1\x08hasRock5\x08hasRock4\x08hasRock3\x02\x01\x0fcompletedParent\x05\x08hasRock2\x08hasRock1\x08hasRock5\x08hasRock4\x08hasRock3\x13triumph:stage0/fire\x01\x18triumph:stage0/firsttool\x01.{"translate":"advancements.stage0.fire.title"}4{"translate":"advancements.stage0.fire.description"}"\x0c\x01\x00\x00\x00\x00\x00\x00\x00\n@\x00\x00\x00A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x17triumph:stage0/charcoal\x01\x1btriumph:stage0/horsechopper\x012{"translate":"advancements.stage0.charcoal.title"}8{"translate":"advancements.stage0.charcoal.description"}\x1b&\x01\x00\x00\x00\x00\x00\x00\x00\nA \x00\x00@\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x15triumph:stage0/baykok\x01\x16triumph:stage0/buffalo\x010{"translate":"advancements.stage0.baykok.title"}6{"translate":"advancements.stage0.baykok.description"}!\xe0\x01\x00\x00\x00\x00\x00\x00\x00\nA\x10\x00\x00A\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\rkilled_spider\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x02\rkilled_spider\x07hasRock\x19triumph:stage0/horsepower\x01\x13triumph:stage0/lead\x014{"translate":"advancements.stage0.horsepower.title"}:{"translate":"advancements.stage0.horsepower.description"}\x1b#\x01\x00\x00\x00\x00\x00\x00\x00\nA\x00\x00\x00@\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x14triumph:stage0/atlas\x01\x18triumph:stage0/workblade\x01/{"translate":"advancements.stage0.atlas.title"}5{"translate":"advancements.stage0.atlas.description"}\x13>\x01\x00\x00\x00\x00\x00\x00\x00\n@\x80\x00\x00?\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x05book1\x0fcompletedParent\x02\x01\x05book1\x01\x0fcompletedParent\x14triumph:stage0/wheel\x01\x15triumph:stage0/saddle\x01/{"translate":"advancements.stage0.wheel.title"}5{"translate":"advancements.stage0.wheel.description"}\x15\x99\x01\x00\x00\x00\x00\x00\x00\x00\nA\x10\x00\x00@\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage1/cart\x01\x14triumph:stage0/wheel\x01.{"translate":"advancements.stage1.cart.title"}4{"translate":"advancements.stage1.cart.description"}\x15\x9a\x01\x00\x00\x00\x00\x00\x00\x00\nA \x00\x00@\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/workblade\x01\x16triumph:stage0/upgrade\x013{"translate":"advancements.stage0.workblade.title"}9{"translate":"advancements.stage0.workblade.description"}!\x16\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00?\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1btriumph:stage0/abyssalbiome\x01\x1dtriumph:stage0/naturescompass\x016{"translate":"advancements.stage0.abyssalbiome.title"}<{"translate":"advancements.stage0.abyssalbiome.description"}#h\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00@4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x0fentered_forest3\x0eentered_forest\x0fentered_forest4\x0fcompletedParent\x0fentered_forest2\x0fentered_forest5\x02\x01\x0fcompletedParent\x05\x0fentered_forest3\x0eentered_forest\x0fentered_forest4\x0fentered_forest2\x0fentered_forest5\x18triumph:stage0/fertility\x01\x16triumph:stage0/totemic\x013{"translate":"advancements.stage0.fertility.title"}9{"translate":"advancements.stage0.fertility.description"}\x01(\x01\x00\x00\x00\x00\x00\x00\x00\nA\x00\x00\x00A\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x08ceremony\x02\x01\x0fcompletedParent\x01\x08ceremony\x1btriumph:stage0/chestupgrade\x01\x19triumph:stage0/firstchest\x016{"translate":"advancements.stage0.chestupgrade.title"}<{"translate":"advancements.stage0.chestupgrade.description"}\'Q\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00@\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x14triumph:stage0/spear\x01\x18triumph:stage0/weaponize\x01/{"translate":"advancements.stage0.spear.title"}5{"translate":"advancements.stage0.spear.description"}&\xe0\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1btriumph:stage0/horsechopper\x01\x19triumph:stage0/horsepower\x016{"translate":"advancements.stage0.horsechopper.title"}<{"translate":"advancements.stage0.horsechopper.description"}\x1b%\x01\x00\x00\x00\x00\x00\x00\x00\nA\x10\x00\x00@\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/mill\x01\x13triumph:stage0/gear\x01.{"translate":"advancements.stage0.mill.title"}4{"translate":"advancements.stage0.mill.description"}\x14\xa2\x01\x00\x00\x00\x00\x00\x00\x00\nA0\x00\x00A\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x16triumph:stage0/leather\x01\x1btriumph:stage0/fluidbladder\x011{"translate":"advancements.stage0.leather.title"}7{"translate":"advancements.stage0.leather.description"}\x01N\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00A\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/handgrind\x01\x18triumph:stage0/workstump\x013{"translate":"advancements.stage0.handgrind.title"}9{"translate":"advancements.stage0.handgrind.description"}\x1b"\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00@t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/weaponize\x01\x18triumph:stage0/firsttool\x013{"translate":"advancements.stage0.weaponize.title"}c{"translate":"Left-Click a Bone on a block like Cobblestone or Stone to turn it into a Sharp Bone"} \xed\x01\x00\x00\x00\x00\x00\x00\x00\n@\x00\x00\x00@`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/stonetools\x01\x16triumph:stage0/upgrade\x014{"translate":"advancements.stage0.stonetools.title"}:{"translate":"advancements.stage0.stonetools.description"}\x01\x12\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/gear\x01\x14triumph:stage0/wheel\x01.{"translate":"advancements.stage0.gear.title"}4{"translate":"advancements.stage0.gear.description"}\x14\xe1\x01\x00\x00\x00\x00\x00\x00\x00\nA \x00\x00A\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/flintknapp\x01\x13triumph:stage0/mesh\x014{"translate":"advancements.stage0.flintknapp.title"}:{"translate":"advancements.stage0.flintknapp.description"}\x01>\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1ctriumph:stage0/waterstrainer\x01\x18triumph:stage0/workstump\x017{"translate":"advancements.stage0.waterstrainer.title"}={"translate":"advancements.stage0.waterstrainer.description"}"\x05\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00@\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x0fcompletedParent\x08hasRock2\x08hasRock1\x03\x01\x0fcompletedParent\x01\x08hasRock2\x01\x08hasRock1\x14triumph:stage0/grill\x01\x16triumph:stage0/firepit\x01/{"translate":"advancements.stage0.grill.title"}5{"translate":"advancements.stage0.grill.description"}"\'\x01\x00\x00\x00\x00\x00\x00\x00\n@\x80\x00\x00A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/root\x00\x01.{"translate":"advancements.stage0.root.title"}4{"translate":"advancements.stage0.root.description"}"\x18\x01\x00\x00\x00\x00\x00\x00\x00\t)minecraft:textures/blocks/cobblestone.png\x00\x00\x00\x00@+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x0ekilledByEntity\x0eenterDimension\nkillEntity\x08location\nbreakBlock\tcraftItem\x0finventoryChange\x01\x07\x0ekilledByEntity\x0eenterDimension\nkillEntity\x08location\nbreakBlock\tcraftItem\x0finventoryChange\x13triumph:stage0/kiln\x01\x18triumph:stage0/workstump\x01.{"translate":"advancements.stage0.kiln.title"}4{"translate":"advancements.stage0.kiln.description"}" \x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00?\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/firstchest\x01\x18triumph:stage0/workstump\x014{"translate":"advancements.stage0.firstchest.title"}:{"translate":"advancements.stage0.firstchest.description"}&\xf7\x01\x00\x00\x00\x02\x00\x00\x00\n@\xa0\x00\x00@\x9a\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x0fcompletedParent\x07hasRock\x08hasRock2\x08hasRock4\x08hasRock3\x02\x01\x0fcompletedParent\x04\x07hasRock\x08hasRock2\x08hasRock4\x08hasRock3\x17triumph:stage0/tomahawk\x01\x18triumph:stage0/weaponize\x012{"translate":"advancements.stage0.tomahawk.title"}8{"translate":"advancements.stage0.tomahawk.description"}&\xe3\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00@\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1btriumph:stage0/woodenbarrel\x01\x1btriumph:stage0/fluidbladder\x016{"translate":"advancements.stage0.woodenbarrel.title"}<{"translate":"advancements.stage0.woodenbarrel.description"}\x1e\xad\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00@\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x08hasRock9\x08hasRock8\x08hasRock7\x0fcompletedParent\x08hasRock2\x08hasRock1\x08hasRock6\x08hasRock5\thasRock10\x08hasRock4\x08hasRock3\x02\x01\x0fcompletedParent\n\x08hasRock9\x08hasRock8\x08hasRock7\x08hasRock2\x08hasRock1\x08hasRock6\x08hasRock5\thasRock10\x08hasRock4\x08hasRock3\x13triumph:stage0/mesh\x01\x14triumph:stage0/fiber\x01.{"translate":"advancements.stage0.mesh.title"}4{"translate":"advancements.stage0.mesh.description"}\x1d\xf8\x01\x00\x00\x00\x00\x00\x00\x00\n@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x00\x04\x13triumph:stage0/root\x07\x0ekilledByEntity\x00\x0eenterDimension\x00\nkillEntity\x00\x08location\x01\x00\x00\x01j\xadm\x90\xc0\nbreakBlock\x00\tcraftItem\x00\x0finventoryChange\x00\x13triumph:stage1/cart\x02\x0fcompletedParent\x00\x07hasRock\x00\x14triumph:stage0/fiber\x02\x0fcompletedParent\x01\x00\x00\x01j\xadm\x90\xc0\x07hasRock\x00\x18triumph:stage0/firsttool\x02\x0fcompletedParent\x01\x00\x00\x01j\xadm\x90\xc0\x07hasRock\x00'

@iceiix iceiix changed the title 1.12.2 Forge: SevTech Ages thebetweenlands crashes StringError("stream did not contain valid UTF-8") 1.12.2 Forge: SevTech Ages advancements crashes StringError("stream did not contain valid UTF-8") May 12, 2019
iceiix added a commit that referenced this issue May 12, 2019
See c1692e9
There are two more instances, encountered when debugging #148

> Instead of read_to_string(), use read_to_end() to read into a buffer,
> then convert using String::from_utf8() and unwrap it. This gives a
> better error message when UTF-8 fails to decode.

which includes the offending bytes that can't be converted
@iceiix
Copy link
Owner Author

iceiix commented May 12, 2019

Improved the generic "did not contain valid UTF-8" error in 10e5d6f, it's parsing a large number of bytes:

about to parse id=4d, dir=Clientbound state=Play
thread '' panicked at 'called Result::unwrap() on an Err value: FromUtf8Error { bytes: [101, 116, 101, 100, 80, 97, 114, 101, 110, 116, 1, 7, 104, 97, 115, 82, 111, 99, 107, 21, 116, 114, 105, 117, 109, 112,...

decodes to 'etedParent\x01\x07hasRock\x15triumph:stage0/melter\x01\x19triumph:stage0...', which is at offset 211 in last_packet. Before is:

'M\x015\x12triumph:stage0/mat\x01\x16triumph:stage0/leather\x01-{"translate":"advancements.stage0.mat.title"}3{"translate":"advancements.stage0.mat.description"}%\x05\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00A%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompl

supposed to be the string length-prefixed "\x0fcompletedParent". Advancements is new in 1.12.2 (not present in 1.11.2).

manually decoding:
M - 0x4d
\x01 - reset/clear bool
5 - 0x35 = 53, mapping size
\x12triumph:stage0/mat - identifier
\x01 - has parent
\x16triumph:stage0/leather
\x01 - has display
0x2d (-) = 45
{"translate":"advancements.stage0.mat.title"} = display
0x33 (3) = 51
{"translate":"advancements.stage0.mat.description"}
%\x05\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00A%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02
\x0fcompletedParent
\x07hasRock

adding lots of logging:

diff --git a/src/protocol/packet.rs b/src/protocol/packet.rs
index 6fb57e9..d35b214 100644
--- a/src/protocol/packet.rs
+++ b/src/protocol/packet.rs
@@ -2046,18 +2046,24 @@ pub struct Advancement {
 
 impl Serializable for Advancement {
     fn read_from<R: io::Read>(buf: &mut R) -> Result<Self, Error> {
+        println!("reading Advancement");
         let id: String = Serializable::read_from(buf)?;
+        println!("id={}", id);
         let parent_id = {
             let has_parent: u8 = Serializable::read_from(buf)?;
+            println!("has_parent? {}", has_parent);
             if has_parent != 0 {
                 let parent_id: String = Serializable::read_from(buf)?;
+                println!("parent_id {}",parent_id);
                 Some(parent_id)
             } else {
                 None
             }
         };
+        println!("parent_id={:?}", parent_id);
 
         let has_display: u8 = Serializable::read_from(buf)?;
+        println!("has_display {}", has_display);
         let display_data = {
             if has_display != 0 {
                 let display_data: AdvancementDisplay = Serializable::read_from(buf)?;
@@ -2066,9 +2072,12 @@ impl Serializable for Advancement {
                 None
             }
         };
+        println!("display_data {:?}", display_data);
 
         let criteria: LenPrefixed<VarInt, String> = Serializable::read_from(buf)?;
+        println!("criteria {:?}", criteria);
         let requirements: LenPrefixed<VarInt, LenPrefixed<VarInt, String>> = Serializable::read_from(buf)?;
+        println!("requirements {:?}", requirements);
         Ok(Advancement {
             id,
             parent_id,
@@ -2102,18 +2111,27 @@ pub struct AdvancementDisplay {
 
 impl Serializable for AdvancementDisplay {
     fn read_from<R: io::Read>(buf: &mut R) -> Result<Self, Error> {
+        println!("reading AdvancementDisplay");
         let title: String = Serializable::read_from(buf)?;
+        println!("title {}", title);
         let description: String = Serializable::read_from(buf)?;
+        println!("description {}", description);
         let icon: Option<crate::item::Stack> = Serializable::read_from(buf)?;
+        println!("icon {:?}", icon);
         let frame_type: VarInt = Serializable::read_from(buf)?;
+        println!("frame_type {:?}", frame_type);
         let flags: i32 = Serializable::read_from(buf)?;
+        println!("flags {}", flags);
         let background_texture: Option<String> = if flags & 1 != 0 {
             Serializable::read_from(buf)?
         } else {
             None
         };
+        println!("background_texture {:?}", background_texture);
         let x_coord: f32 = Serializable::read_from(buf)?;
+        println!("x_coord {:?}", x_coord);
         let y_coord: f32 = Serializable::read_from(buf)?;
+        println!("y_coord {:?}", y_coord);
 
         Ok(AdvancementDisplay {
             title,
@@ -2170,13 +2188,17 @@ pub struct CriterionProgress {
 
 impl Serializable for CriterionProgress {
     fn read_from<R: io::Read>(buf: &mut R) -> Result<Self, Error> {
+        println!("read CriterionProgress");
         let id = Serializable::read_from(buf)?;
+        println!("id {:?}", id);
         let achieved: u8 = Serializable::read_from(buf)?;
+        println!("achieved {:?}", achieved);
         let date_of_achieving: Option<i64> = if achieved != 0 {
             Serializable::read_from(buf)?
         } else {
             None
         };
+        println!("date {:?}", date_of_achieving);
 
         Ok(CriterionProgress {
             id,

output:

about to parse id=18, dir=Clientbound state=Play
packet = Some(PluginMessageClientbound(PluginMessageClientbound { channel: "thebetweenlands", data: [17, 0, 0, 0, 12, 0, 0, 0, 26, 10, 0, 0, 0] }))
Decompressed threshold=256 len=2360 uncompressed_size=14986 to 14986 bytes
about to parse id=4d, dir=Clientbound state=Play
reading Advancement
id=triumph:stage0/mat
has_parent? 1
parent_id triumph:stage0/leather
parent_id=Some("triumph:stage0/leather")
has_display 1
reading AdvancementDisplay
title {"translate":"advancements.stage0.mat.title"}
description {"translate":"advancements.stage0.mat.description"}
icon Some(Stack { id: 9477, count: 1, damage: Some(0), tag: None })
frame_type 0
flags 10
background_texture None
x_coord 7.0
y_coord 10.3125
display_data Some(AdvancementDisplay { title: "{"translate":"advancements.stage0.mat.title"}", description: "{"translate":"advancements.stage0.mat.description"}", icon: Some(Stack { id: 9477, count: 1, damage: Some(0), tag: None }), frame_type: 0, flags: 10, background_texture: None, x_coord: 7.0, y_coord: 10.3125 })

so far so good...but then lots of empty data:

criteria []
requirements []

reading Advancement
id=
has_parent? 0
parent_id=None
has_display 0
display_data None
criteria []
requirements []

reading Advancement
id=
has_parent? 0
parent_id=None
has_display 0
display_data None
criteria []
requirements []

reading Advancement
id=
has_parent? 0
parent_id=None
has_display 2
^ this doesn't make any sense, has_display is supposed to be a bool (0 or 1) not 2

reading AdvancementDisplay
title completedParent
description hasRock
thread '' panicked at 'called Result::unwrap() on an Err value: FromUtf8Error { bytes: [101, 116, 101, 100, 80,

Not even https://github.com/PrismarineJS/node-minecraft-protocol can parse this:

const mc=require('minecraft-protocol');
const d=mc.createDeserializer({version:"1.12.2", state:mc.states.PLAY});
d.on('data',(parsed)=>{
  console.log(JSON.stringify(parsed, null, ''));
  console.log(parsed.data.params);
});
d.write(require('fs').readFileSync('../../rust/steven/last-packet'));

Error: Read error for params.advancements.advancementMapping.3.value.displayData.icon.unknown.default.nbtData.type : 109 is not in the mappings value

hmm, there was a recent update 17 days ago to the advancements packet here: PrismarineJS/minecraft-data@b9e1b29 - but appears unrelated. Icon is decoded as a slot here: https://github.com/PrismarineJS/minecraft-data/blob/8b62c26045a277172bdfafbe3298ae745c46ac58/data/pc/1.12.2/protocol.json#L849 - but it is choking on the 109 NBT data type. node-minecraft-protocol supports these NBT mappings:

{ '0': 'end',
  '1': 'byte',
  '2': 'short',
  '3': 'int',
  '4': 'long',
  '5': 'float',
  '6': 'double',
  '7': 'byteArray',
  '8': 'string',
  '9': 'list',
  '10': 'compound',
  '11': 'intArray',
  '12': 'longArray' }

Steven decodes tags in:

fn read_type<R: io::Read>(id: u8, buf: &mut R) -> Result<Tag, protocol::Error> {
- same 0 to 12, but if it choked here there would be an "invalid tag" error.

Maybe a mod changed the advancement structure?

@iceiix
Copy link
Owner Author

iceiix commented May 12, 2019

This Forge change looks suspect: MinecraftForge/MinecraftForge#4114 Allow advancement icons to have nbt, but the discussion claims standard deserialization will read/write it:

the stack is just written and read wholesale using PacketBuffer.readItemStack/writeItemStack, the json deserialization just ignores it for some reason

and indeed the icon is an Option<crate::item::Stack>.

There is support in Forge for loading mod enhancements: MinecraftForge/MinecraftForge@a4fb33d Add support for loading mod advancements from the mod jar files.

And another change to support oredict item predicates in advancements: MinecraftForge/MinecraftForge#4188 Add support for oredict item predicates in advancements, and add a registry for item predicates - it changes the critereon[sic] criterion, but maybe not the packet? But there is also added resilience in Forge, an option to continue on errors: MinecraftForge/MinecraftForge#4277 [1.12] Continue loading mod recipes and advancements after encountering an error .

A big change is allowing pagination on advancements: MinecraftForge/MinecraftForge#4183 - client-side only apparently. Finally, another robustness change: MinecraftForge/MinecraftForge@6d35b1b Fixed invalid erroring case during loading Advancements form mods that don't have advancements.

Worst case, could just ignore the Advancements packet, avoiding parsing it, skipping over the byte length... this would allow connecting, and the packets aren't supported anyways yet here.

@iceiix
Copy link
Owner Author

iceiix commented May 12, 2019

last-packet.zip

@iceiix
Copy link
Owner Author

iceiix commented May 12, 2019

Filed to node-minecraft-protocol since they also can't parse this packet, if they are interested in adding support too: PrismarineJS/node-minecraft-protocol#627

but for now, may be the most expedient to just skip parsing this packet: #149. It is a big hairy packet, could cause a lot of problems and I'm not even using it...

iceiix added a commit that referenced this issue May 14, 2019
…#149)

Leave the advancements packet as an opaque blob for now instead of trying to deserialize it, because it apparently is changed on some modded servers - see #148
@iceiix iceiix closed this as completed May 14, 2019
iceiix added a commit that referenced this issue Feb 1, 2020
See c1692e9
There are two more instances, encountered when debugging #148

> Instead of read_to_string(), use read_to_end() to read into a buffer,
> then convert using String::from_utf8() and unwrap it. This gives a
> better error message when UTF-8 fails to decode.

which includes the offending bytes that can't be converted
iceiix added a commit that referenced this issue Feb 1, 2020
…#149)

Leave the advancements packet as an opaque blob for now instead of trying to deserialize it, because it apparently is changed on some modded servers - see #148
iceiix added a commit that referenced this issue Feb 1, 2020
See c1692e9
There are two more instances, encountered when debugging #148

> Instead of read_to_string(), use read_to_end() to read into a buffer,
> then convert using String::from_utf8() and unwrap it. This gives a
> better error message when UTF-8 fails to decode.

which includes the offending bytes that can't be converted
iceiix added a commit that referenced this issue Feb 1, 2020
…#149)

Leave the advancements packet as an opaque blob for now instead of trying to deserialize it, because it apparently is changed on some modded servers - see #148
iceiix added a commit that referenced this issue Feb 1, 2020
See c1692e9
There are two more instances, encountered when debugging #148

> Instead of read_to_string(), use read_to_end() to read into a buffer,
> then convert using String::from_utf8() and unwrap it. This gives a
> better error message when UTF-8 fails to decode.

which includes the offending bytes that can't be converted
iceiix added a commit that referenced this issue Feb 1, 2020
…#149)

Leave the advancements packet as an opaque blob for now instead of trying to deserialize it, because it apparently is changed on some modded servers - see #148
iceiix added a commit that referenced this issue Feb 2, 2020
See c1692e9
There are two more instances, encountered when debugging #148

> Instead of read_to_string(), use read_to_end() to read into a buffer,
> then convert using String::from_utf8() and unwrap it. This gives a
> better error message when UTF-8 fails to decode.

which includes the offending bytes that can't be converted
iceiix added a commit that referenced this issue Feb 2, 2020
See c1692e9
There are two more instances, encountered when debugging #148

> Instead of read_to_string(), use read_to_end() to read into a buffer,
> then convert using String::from_utf8() and unwrap it. This gives a
> better error message when UTF-8 fails to decode.

which includes the offending bytes that can't be converted
iceiix added a commit that referenced this issue Feb 2, 2020
…#149)

Leave the advancements packet as an opaque blob for now instead of trying to deserialize it, because it apparently is changed on some modded servers - see #148
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant