diff --git a/gleam.toml b/gleam.toml index 6b70da3..933800c 100644 --- a/gleam.toml +++ b/gleam.toml @@ -7,7 +7,7 @@ links = [ ] [dependencies] -gleam_stdlib = ">= 0.41.0 and < 2.0.0" +gleam_stdlib = ">= 0.42.0 and < 2.0.0" [dev-dependencies] gleeunit = ">= 1.2.0 and < 2.0.0" diff --git a/manifest.toml b/manifest.toml index 700f07e..48afdba 100644 --- a/manifest.toml +++ b/manifest.toml @@ -2,13 +2,13 @@ # You typically do not need to edit this file packages = [ - { name = "filepath", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "filepath", source = "hex", outer_checksum = "EFB6FF65C98B2A16378ABC3EE2B14124168C0CE5201553DE652E2644DCFDB594" }, - { name = "gleam_stdlib", version = "0.41.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "1B2F80CB1B66B027E3198A2FF71EF3F2F31DF89ED97AD606F25FD387A4C3C1EF" }, + { name = "filepath", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "filepath", source = "hex", outer_checksum = "67A6D15FB39EEB69DD31F8C145BB5A421790581BD6AA14B33D64D5A55DBD6587" }, + { name = "gleam_stdlib", version = "0.47.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "3B22D46743C46498C8355365243327AC731ECD3959216344FA9CF9AD348620AC" }, { name = "gleeunit", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "F7A7228925D3EE7D0813C922E062BFD6D7E9310F0BEE585D3A42F3307E3CFD13" }, { name = "simplifile", version = "2.2.0", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "0DFABEF7DC7A9E2FF4BB27B108034E60C81BEBFCB7AB816B9E7E18ED4503ACD8" }, ] [requirements] -gleam_stdlib = { version = ">= 0.41.0 and < 2.0.0" } +gleam_stdlib = { version = ">= 0.42.0 and < 2.0.0" } gleeunit = { version = ">= 1.2.0 and < 2.0.0" } simplifile = { version = ">= 2.0.1 and < 3.0.0" } diff --git a/src/file_streams/file_stream.gleam b/src/file_streams/file_stream.gleam index c80343c..99979f7 100644 --- a/src/file_streams/file_stream.gleam +++ b/src/file_streams/file_stream.gleam @@ -274,6 +274,12 @@ pub fn write_bytes( Error(file_stream_error.Enotsup), ) + // Check that the bit array contains a whole number of bytes + use <- bool.guard( + bit_array.bit_size(bytes) % 8 != 0, + Error(file_stream_error.Einval), + ) + case file_write(stream.io_device, bytes) { raw_result.Ok -> Ok(Nil) raw_result.Error(e) -> Error(e) diff --git a/test/file_streams_test.gleam b/test/file_streams_test.gleam index a7b3835..c5ced05 100644 --- a/test/file_streams_test.gleam +++ b/test/file_streams_test.gleam @@ -547,3 +547,17 @@ pub fn set_encoding_test() { simplifile.delete(tmp_file_name) |> should.equal(Ok(Nil)) } + +@target(erlang) +pub fn write_partial_bytes_test() { + let assert Ok(stream) = file_stream.open_write(tmp_file_name) + + file_stream.write_bytes(stream, <<"A", 0:7>>) + |> should.equal(Error(file_stream_error.Einval)) + + file_stream.close(stream) + |> should.equal(Ok(Nil)) + + simplifile.delete(tmp_file_name) + |> should.equal(Ok(Nil)) +}