Commit Graph

209 Commits

Author SHA1 Message Date
relrelb 53cc9f38fc swf: Use casting instead of ToPrimitive 2021-06-07 11:29:28 -07:00
relrelb de6e2a04a4 swf: Number enum VideoCodec 2021-06-07 11:29:28 -07:00
relrelb 50a4643253 swf: Number enum VideoDeblocking 2021-06-07 11:29:28 -07:00
relrelb 636775f1e2 swf: Number enum TextGridFit 2021-06-07 11:29:28 -07:00
relrelb a45fdba4d1 swf: Number enum FontThickness 2021-06-07 11:29:28 -07:00
relrelb 88b6632188 swf: Number enum TextAlign 2021-06-07 11:29:28 -07:00
relrelb 781e3ff0cd swf: Number enum AudioCompression 2021-06-07 11:29:28 -07:00
relrelb ee14945974 swf: Number enum LineCapStyle 2021-06-07 11:29:28 -07:00
relrelb f6d04061b0 swf: Number enum GradientSpread 2021-06-07 11:29:28 -07:00
relrelb fed4facd8a swf: Number enum SoundEvent 2021-06-07 11:29:28 -07:00
relrelb 0d279a05c2 swf: Number enum BlendMode 2021-06-07 11:29:28 -07:00
relrelb 72113dbcf2 swf: Number enum Language 2021-06-07 11:29:28 -07:00
relrelb f82faf9603 chore: Appease clippy 2021-06-05 10:16:00 -07:00
Mike Welsh f173b81e38 swf: Use bitflags for Function flags 2021-05-30 22:14:32 -07:00
Mike Welsh 2b98c878f0 swf: Use Fixed in more places 2021-05-30 21:24:03 -07:00
Mike Welsh e1439f4105 swf: Add HeaderExt struct providing additional info
When reading an SWF, search for FileAttributes and
SetBackgroundColor and return this along with the header data
because it's useful (in particular, the AS3 flag).
2021-05-23 23:02:38 -07:00
Mike Welsh 8960414436 swf: Use bitflags for FileAttributes 2021-05-22 15:53:02 -07:00
Eduardo Sánchez Muñoz e3dc8ff28e swf: SwfStr: reimplement `Debug` with `std::ascii::escape_default`
The string will now be surrounded with quotes (`"`), non-ASCII characters (UTF-8 or not) will be escaped in hexadecimal form (`\xNN`) and ASCII control characters will be escaped (`\x01`, `\n`, `\t`).
2021-05-12 10:53:26 -07:00
Mike Welsh 9538647422 tests: Fix swf::Fixed tests in --release (fix #4313)
Use `#[cfg_attr(debug_assertions, should_panic)]` to ensure that
the tests only expect to panic in debug builds.

Fixes #4313.
2021-05-11 20:53:23 -07:00
dependabot[bot] 185a4f5b8f chore: Bump lzma-rs from 0.1.3 to 0.2.0
Bumps [lzma-rs](https://github.com/gendx/lzma-rs) from 0.1.3 to 0.2.0.
- [Release notes](https://github.com/gendx/lzma-rs/releases)
- [Changelog](https://github.com/gendx/lzma-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/gendx/lzma-rs/compare/v0.1.3...v0.2.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-03 15:37:29 -07:00
CUB3D 12a198f671 avm2: Implement Op::Coerce and add tests 2021-04-21 00:33:11 -07:00
CUB3D 89c01dca18 swf: Add support for AVM2 domain memory opcodes 2021-04-21 00:33:11 -07:00
Mike Welsh 0552d26551 core: Use Fixed8 and i16 for ColorTransform
Use the proper types for ColorTransform:
 * Fixed8 (8.8) format for multiplicative component
 * i16 format for additive component

This matches the behavior of Flash (for example, alpha only changes
in units of 1/256).
2021-04-19 15:47:52 -07:00
Mike Welsh 50f2ecb1b5 swf: Add Fixed8 and Fixed16 types 2021-04-19 15:47:52 -07:00
Mike Welsh db6000f071 avm2: Fix parsing of variable-length s32 values
The values are not sign-extended as the spec suggests; a negative
value must use all 5 bytes.
2021-04-18 17:32:01 -07:00
dependabot-preview[bot] 9832a7385e build(deps): bump libflate from 1.0.4 to 1.1.0
Bumps [libflate](https://github.com/sile/libflate) from 1.0.4 to 1.1.0.
- [Release notes](https://github.com/sile/libflate/releases)
- [Commits](https://github.com/sile/libflate/compare/1.0.4...1.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-17 10:25:29 -07:00
Mike Welsh b9d84c0a82 chore: Appease clippy
Honor the branches-sharing-code lint.
2021-04-15 00:02:27 -07:00
EmperorBale a39a1dd64f swf: Add missing opcodes 2021-04-14 21:41:31 -07:00
relrelb 20d6fcc128 chore: Remove unnecessary type annotations 2021-04-10 18:39:16 -07:00
CUB3D d5c2e5559b avm2: Don't mutably borrow for pos() 2021-04-03 16:37:47 -06:00
relrelb 15c1cf5bf6 chore: Appease clippy 2021-03-23 16:16:35 -07:00
relrelb e840dce803 common_tess: Make Vertex layout-agnostic
And define a specific layout in webgl instead.
This brings common_tess closer to serve wgpu (which has a different
Vertex layout).
2021-03-23 16:16:35 -07:00
relrelb e594f602b6 chore: Twips::new(0) -> Twips::zero() 2021-03-13 00:56:04 -08:00
Adrian Wielgosik 1c2492005c
avm2: Fix AVM2 reader not reading variable-length numbers correctly 2021-03-11 19:55:08 -08:00
Mads Marquart 121ae43d25 swf: Remove unused encoding from avm1::read::Reader 2021-02-27 17:04:42 -08:00
Mads Marquart 66f5c856d7 swf: Make a few functions const 2021-02-27 17:04:42 -08:00
Mads Marquart 1455671cd7 swf: Change read_tag_with_code to take an already parsed tag 2021-02-27 17:04:42 -08:00
Mads Marquart 9243010cc0 swf: Clean up a few imports 2021-02-27 17:04:42 -08:00
Mads Marquart 24780003e7 swf: Deduplicate different read methods 2021-02-27 17:04:42 -08:00
Mads Marquart dad21d4398 swf: Make avm2 Reader operate directly with byte slices 2021-02-27 17:04:42 -08:00
Mike Welsh 3099914374 chore: Appease clippy 2021-02-27 16:10:46 -08:00
David Wendt 92bfc18e1d swf: Make video-related tags publicly parsable 2021-02-16 19:03:48 -08:00
relrelb bb89391f3a chore: Avoid deprecated constants
The Rust documentation considers numeric constants prefixed with std::
as deprecated.
For example: https://doc.rust-lang.org/std/u16/constant.MAX.html.
2021-02-12 06:36:17 -08:00
Mike Welsh e5fb1f09e7 chore: Appease clippy
* #[derive(Collect)] should be before #[collect]
 * Replace redunant `&buf[..]` with `buf`
 * Changes most cases of UPPERCase to UpperCase
 * Allow upper_case_acronym on most SWF types, as they are from
   SWF spec/more annoying to change.
2021-02-12 06:32:42 -08:00
TÖRÖK Attila 80b0bd3b33 swf: Add VideoCodec::ScreenVideoV2 variant 2021-02-12 03:37:14 -08:00
Napen123 a132f68688 docs: Update the documentation of SwfStr 2021-02-07 23:44:19 -08:00
Napen123 1ef3de8556 docs: Document the Rectangle type in the swf crate 2021-02-07 23:44:19 -08:00
Napen123 404fc72cb5 docs: Document the Color type in the swf crate 2021-02-07 23:44:19 -08:00
Napen123 52ebc48b2c docs: Update the documentation of Twips
Add code examples to all Twips methods and convert method references to actual links.
2021-02-07 23:44:19 -08:00
dependabot-preview[bot] dd4860c469 build(deps): bump encoding_rs from 0.8.26 to 0.8.28
Bumps [encoding_rs](https://github.com/hsivonen/encoding_rs) from 0.8.26 to 0.8.28.
- [Release notes](https://github.com/hsivonen/encoding_rs/releases)
- [Commits](https://github.com/hsivonen/encoding_rs/compare/v0.8.26...v0.8.28)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-04 11:22:31 -08:00
Mike Welsh 47f0f980b8 core: Handle PlaceObject tags with malformed clip actions
Some SWFs in the wild have PlaceObject tags with ending ClipActions
that are 2 bytes instead of the required 4 bytes (see #2899).
Swallow the error in this case so that the tag can run.
2021-02-02 23:56:48 -08:00
Mike Welsh 02d99c3686 core: CSMTextSettings tag alters text hit testing
Normally, a hit test on static text will consider the text glyphs.
However, a CSMTextSettings tag can change the text to use the
"advanced rendering engine", which causes hit tests to only consider
the bounds. This is toggled by the "Anti-alias for readibility"
setting in the Flash IDE.

Wire up the CSMTextSettings tag and adjust hit test behavior based
on this flag.

Fixes #2987.
2021-02-01 17:17:41 -08:00
relrelb a2dcad683d swf: Refactor read_tag_list 2021-01-29 13:05:37 -08:00
Mads Marquart bb4240ad1f chore: Add a few comments about unsafe usage 2021-01-28 14:39:35 -08:00
Mads Marquart 8eddde76a2 swf: Add safe and simpler string parsing 2021-01-28 14:39:35 -08:00
relrelb 19662503ca swf: Convert ButtonActionCondition to bitflags 2021-01-23 11:59:24 -08:00
relrelb 7f4845d777 swf: Convert ButtonState to bitflags 2021-01-23 11:59:24 -08:00
relrelb b05c6540e1
chore: Migrate from enumset to bitflags 2021-01-21 16:35:46 -08:00
Mike Welsh 2254589e71 swf: Don't error on focal gradients in DefineShape tags (fix #2730) 2021-01-21 15:47:04 -08:00
Mike Welsh 66256dd3be swf: SwfStr no longer contains encoding
SwfStr is now an unsized slice analogous to `str` or `bstr`.
The desired encoding must be supplied when converting to String.
2021-01-20 15:02:31 -08:00
Mike Welsh 700c3c1767 chore: Appease clippy 2021-01-20 15:02:31 -08:00
Mike Welsh 303a2620a7 swf: Fix uncompressed length check 2021-01-20 15:02:31 -08:00
Mike Welsh c063264d1c swf: Use bitstream_io 2021-01-20 15:02:31 -08:00
Mike Welsh 61628a74fc swf: Rename and organize some util methods
* SwfRead -> SwfReadExt
 * SwfWrite -> SwfWriteExt
 * read_swf_header -> decompress_swf
 * read_swf -> parse_swf
2021-01-20 15:02:31 -08:00
Mike Welsh 1d9c11e145 swf: Add SwfStr type to handle encodings in SWF<6 2021-01-20 15:02:31 -08:00
Mike Welsh 19034b76e4 swf: Return slices in swf::Reader
Avoid copies by returning slices of the decompressed input.
2021-01-20 15:02:31 -08:00
Mike Welsh bf94f5dbaa swf: Split out bit i/o into SwfBitsReader/Writer types 2021-01-20 15:02:31 -08:00
Mike Welsh da1e2801a2 chore: Appease clippy 2021-01-18 21:23:50 -08:00
MrCheeze 5915f2a841 core: Return uncompressed length for getBytesLoaded/Total 2021-01-09 14:29:19 -08:00
dependabot-preview[bot] f80d74a3d7 build(deps): bump smallvec from 1.6.0 to 1.6.1
Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.6.0 to 1.6.1.
- [Release notes](https://github.com/servo/rust-smallvec/releases)
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.6.0...v1.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-08 12:09:49 -08:00
dependabot-preview[bot] dbb1bfb845 build(deps): bump byteorder from 1.3.4 to 1.4.2
Bumps [byteorder](https://github.com/BurntSushi/byteorder) from 1.3.4 to 1.4.2.
- [Release notes](https://github.com/BurntSushi/byteorder/releases)
- [Changelog](https://github.com/BurntSushi/byteorder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BurntSushi/byteorder/compare/1.3.4...1.4.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-08 12:09:34 -08:00
dependabot-preview[bot] 6a3b9f9f53 build(deps): bump smallvec from 1.5.1 to 1.6.0
Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.5.1 to 1.6.0.
- [Release notes](https://github.com/servo/rust-smallvec/releases)
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.5.1...v1.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-31 14:37:38 -08:00
Mike Welsh 7cf217a911 swf: Use lzma-rs for LZMA SWFs (fix #405)
Pure Rust decoder that functions on desktop and wasm.
Enable lzma feature by default.

TODO: Switch to lzma-rs streaming API when stable on crates.io.
Currently decodes entire stream at once.
2020-12-17 16:40:21 -08:00
Adrian Wielgosik 484bd2c11a
avm1: Revert #1470 to improve wasm performance 2020-12-17 12:47:22 -08:00
Mike Welsh cec0ca74e1 chore: Fix swf doctests working directory
Rust 12-09 nightly changed the working dir of doctests to be the
workspace root instead of the subcrate root. This broke the
doctests for swf. Now do some setup to ensure the same working
directory on both stable and nightly.

cc https://github.com/rust-lang/cargo/pull/8954
2020-12-10 12:25:02 -08:00
David Wendt 0069d51dad swf: `pushshort` should be read as a `u30` and then cast to an `i16` as it's parsed representation. 2020-12-09 14:00:06 -08:00
David Wendt 3225cd40e2 core: Avoid panic when display objects are manipulated in clearly invalid ways. 2020-12-09 14:00:06 -08:00
jmckiern 3cab11d18e avm1: Implement TextField.textColor (close #1863) 2020-12-07 15:09:36 -08:00
Mike Welsh 2757bc4dad chore: Appease clippy
Allow suspicious_operation_groupings for Matrix.
2020-12-07 10:14:31 -08:00
dependabot-preview[bot] f45fa80e29 build(deps): bump smallvec from 1.5.0 to 1.5.1
Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.5.0 to 1.5.1.
- [Release notes](https://github.com/servo/rust-smallvec/releases)
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.5.0...v1.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-04 17:54:47 -08:00
Mike Welsh 53212f192c chore: Appease clippy, squelch unnecessary_wraps lint 2020-11-24 18:59:42 -08:00
Mike Welsh eb0b16790c swf: Allow construct clip events in SWFv6 2020-11-22 19:34:29 -08:00
dependabot-preview[bot] 6bfa3144c3 build(deps): bump smallvec from 1.4.2 to 1.5.0
Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.4.2 to 1.5.0.
- [Release notes](https://github.com/servo/rust-smallvec/releases)
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.4.2...v1.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-18 16:30:15 -08:00
Mike Welsh 316bc4e920 chore: Appease clippy 2020-11-09 01:52:57 -08:00
Mike Welsh 0c38dafd0d avm1: Switch to SmallVec for ActionPush
While switching swf to return slices, I noticed ActionPush was
potentially allocating a huge vector by mistake.
Switch to SmallVec<[Value; 4]> to fix this and avoid the
allocation in general (this was fairly high up in the profiler).

TODO: Return an iterator instead of any sort of vec.
2020-11-03 13:47:12 -08:00
dependabot-preview[bot] 55d16c200a build(deps): bump approx from 0.3.2 to 0.4.0
Bumps [approx](https://github.com/brendanzab/approx) from 0.3.2 to 0.4.0.
- [Release notes](https://github.com/brendanzab/approx/releases)
- [Commits](https://github.com/brendanzab/approx/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-25 12:07:13 -07:00
relrelb 083e2a2ff5 core: Implement getBytes{Loaded,Total} (simpler approach) 2020-10-23 13:13:00 -07:00
relrelb 14a71b69cc core: Implement getBytes{Loaded,Total} 2020-10-23 13:13:00 -07:00
Mike Welsh a6b952e44e core: Switch from libflate to flate2 2020-10-12 13:47:35 -07:00
Mike Welsh 4467ccf7e3 tests: Add swf test for bitmap line style 2020-10-10 16:35:37 -07:00
Mike Welsh ed99a15dee swf: Fill styles are byte aligned
A bitmap fill style ends in a matrix, but the overall type should
still be byte aligned. This could cause certain shapes with bitmap
line styles to be incorrectly parsed. Fixes #1192.
2020-10-10 16:35:37 -07:00
Luca Weiss d5cb396331 *: fix spelling mistakes 2020-09-19 16:17:58 -07:00
Mike Welsh 5ea06b0ce6 swf: Use Option for more PlaceObject parameters
There is a difference between empty/default (change value to default)
and none (don't modify), so make this explicit for some PlaceObject
parameters where it wasn't.

Fixes #1104.
2020-09-03 19:09:48 -07:00
Mike Welsh d7a186b2cd avm1: Implement shape hit testing 2020-09-02 17:51:55 -07:00
David Wendt 345a244ed4 `read_i32` no longer panics if more than 28 bits are defined within the read-in integer constant.
The underlying problem is actually shift overflow - on the fifth byte in the sequence, it attempts to mask bits by shifting them off the left of the value, which doesn't work here, as we'll be shifting by -3. For those unaware, shifting by a negative does NOT shift in the opposite direction, it instead gives your C compiler permission to stuff demons up your nose.

I wouldn't be surprised if this is just outright UB in Flash Player.
2020-08-10 16:38:04 -07:00
David Wendt 95ca978034 f64 constants in ABC files are not stored in Flash mixed-endian. 2020-08-10 16:38:04 -07:00
dependabot-preview[bot] 04b146ffc4 build(deps): bump enumset from 1.0.0 to 1.0.1
Bumps [enumset](https://github.com/Lymia/enumset) from 1.0.0 to 1.0.1.
- [Release notes](https://github.com/Lymia/enumset/releases)
- [Changelog](https://github.com/Lymia/enumset/blob/master/RELEASES.md)
- [Commits](https://github.com/Lymia/enumset/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-09 13:15:38 -07:00
Mike Welsh 4680b01f03 swf: Allow StyleChangeRecord in DefineShape v1
The spec says that StyleChangeRecord is only supported in
DefineShape2+, but SWFs exist with StyleChangeRecord in
DefineShape1 tags, and these play correctly in the Flash Player.
(see #929 HAGIMURA_EXTREME.swf).
2020-07-24 18:46:18 -07:00
David Wendt ccacc540bf Remove dead code on all now-in-use structs and methods. 2020-07-18 16:12:24 -04:00
David Wendt a44e700e81 Sign extend negative `s24` values correctly. 2020-07-13 17:44:30 -04:00