Commit Graph

278 Commits

Author SHA1 Message Date
relrelb e88c7102f5 swf: Use bitflags for `PlaceFlag` 2022-03-26 11:33:26 -07:00
relrelb 6d2005c2fe swf: Simplify `read_str_with_len`
Read the length in the function itself rather than receiving it as
an argument.
2022-03-26 11:33:26 -07:00
relrelb 1230b5e713 swf: Use bitflags for `FontFlag` 2022-03-26 11:33:26 -07:00
relrelb 71a1757d29 swf: Make `Glyph::advance` non-`Option`
Simply use `0` instead of `None`.
2022-03-26 11:33:26 -07:00
relrelb 984342abf3 swf: Avoid some `Vec::resize` usages
Use the `vec![]` macro instead.
2022-03-26 11:33:26 -07:00
dependabot[bot] da613a6fc5 build(deps): bump libflate from 1.1.2 to 1.2.0
Bumps [libflate](https://github.com/sile/libflate) from 1.1.2 to 1.2.0.
- [Release notes](https://github.com/sile/libflate/releases)
- [Commits](https://github.com/sile/libflate/compare/1.1.2...1.2.0)

---
updated-dependencies:
- dependency-name: libflate
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-26 11:20:34 -07:00
dependabot[bot] f9e361ddae build(deps): bump bitstream-io from 1.2.0 to 1.3.0
Bumps [bitstream-io](https://github.com/tuffy/bitstream-io) from 1.2.0 to 1.3.0.
- [Release notes](https://github.com/tuffy/bitstream-io/releases)
- [Commits](https://github.com/tuffy/bitstream-io/commits)

---
updated-dependencies:
- dependency-name: bitstream-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-26 10:52:26 -07:00
relrelb e9167cf43c swf: Add minimal offset table enforcement in `DefineFont2/3`
Previously, the offset table and code table offset were completely
ignored. But as it seems, Flash does look into these offsets in
order to avoid exceedingly reading glyph shapes. For now, avoid
exceedingly reading empty and 1-byte glyph shapes, and add debug
assertions that verify the correctness of the offset table and code
table offset, to help diagnosing related bugs in the future.
2022-03-14 22:50:24 +02:00
Jean Marchand 9969e0ce5a avm2: Fix invalid option 2022-02-12 23:35:32 +02:00
Mike Welsh 55da3cd7d0 chore: Add .cargo/config.toml for workspace-level lint config
Currently it is not directly possible to configure lints for the
entire workspace via TOML, which forced us to repeat `#![allow]`
blocks in each crate.

embark pointed out this workaround to configure lints at the
workspace level via RUSTFLAGS:

https://github.com/EmbarkStudios/rust-ecosystem/issues/22#issuecomment-947011395

Remove the common `#![allow]` blocks and switch to this method for
global lint config.

Temporarily allow `needless_borrow` lint, buggy pending this fix:
https://github.com/rust-lang/rust-clippy/pull/8355
2022-01-29 14:22:44 -08:00
Mike Welsh b181debff6 swf: Use bitflags for `avm1::GetUrl2` 2022-01-17 21:35:57 -08:00
Mike Welsh 4c3e14eae5 core: Clean up `DefineFunction` action
* Have `DefineFunction` and `DefineFunction2` go through the same
   code path by implementing `From<DefineFunction>` for
   `DefineFunction2`.
 * Change `register` to a `Option<NonZeroU8>` for size optimization.
 * Add `function::Param` to store param info instead of a tuple.
2022-01-17 21:35:57 -08:00
Mike Welsh 2b2346b65e swf: Add `avm1::Action::End`
Returning an `Action::End` instead of `None` when reading the end
of an action.
2022-01-17 21:35:57 -08:00
Mike Welsh d5862809c7 swf: Remove extraneous ? in avm1::Writer 2022-01-17 21:35:57 -08:00
Mike Welsh 265bcc278a swf: Add avm1::Writer::write_small_action
Convenience method for writing zero-length actions.
2022-01-17 21:35:57 -08:00
Mike Welsh 9141451ca1 swf: Use structs for avm1 `Action` variants
Use a struct for all variants of `avm1::Action`.
This makes the style more consistent instead of using a mix of
struct and tuple variants, and allows the data to be easily passed
around.
2022-01-17 21:35:57 -08:00
Adrian Wielgosik 22a0711d85 avm2: Use TU's method cache for callstatic, newfunction opcodes 2021-12-17 21:09:40 -07:00
David Wendt 2aee3555ab chore: Fix all new clippy lints added in latest Rust nightly 2021-12-17 20:53:26 -07:00
dependabot[bot] ef679d25c7 build(deps): bump encoding_rs from 0.8.29 to 0.8.30
Bumps [encoding_rs](https://github.com/hsivonen/encoding_rs) from 0.8.29 to 0.8.30.
- [Release notes](https://github.com/hsivonen/encoding_rs/releases)
- [Commits](https://github.com/hsivonen/encoding_rs/compare/v0.8.29...v0.8.30)

---
updated-dependencies:
- dependency-name: encoding_rs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-13 23:22:28 +02:00
Adrian Wielgosik 685911a77c swf: Box ShapeRecord::StyleChange variant 2021-12-08 22:14:17 +01:00
relrelb da4b5986b1 chore: Appease clippy 2021-12-08 22:36:55 +02:00
relrelb 0b6cd45415 swf: Fix reserved gradient values handling
* Map 3 to `GradientSpread::Pad`
* Map 2 and 3 to `GradientInterpolation::Rgb`

Fix #1505.
2021-12-04 21:32:47 +02:00
Adrian Wielgosik a305b80789 swf: Support font layout without swf-v7 fields 2021-11-20 22:48:36 +01:00
relrelb 34d1fa5226 avm1: Introduce `TextFormatObject`
`TextFormat` objects differ from regular objects in that
`TextField.setTextFormat` and `TextField.setNewTextFormat` accept
only the former, and ignore the latter.

Also, `TextFormat.prototype` has native accessors that coerce the
values on get/set.
2021-10-30 10:03:36 -07:00
Adrian Wielgosik 8cc00f32bb chore: Stop using traits available in prelude 2021-10-21 10:24:05 -07:00
Adrian Wielgosik bc82a4f705 build: Bump Rust edition to 2021 2021-10-21 10:24:05 -07:00
dependabot[bot] 5cab790bd7 build(deps): bump encoding_rs from 0.8.28 to 0.8.29
Bumps [encoding_rs](https://github.com/hsivonen/encoding_rs) from 0.8.28 to 0.8.29.
- [Release notes](https://github.com/hsivonen/encoding_rs/releases)
- [Commits](https://github.com/hsivonen/encoding_rs/compare/v0.8.28...v0.8.29)

---
updated-dependencies:
- dependency-name: encoding_rs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-18 14:01:23 -07:00
relrelb d069b8dcd6 swf: Avoid one usage of `Reader::pos` 2021-10-08 13:22:45 -07:00
relrelb 693f49904f swf: Extract `BitReader::new` 2021-10-08 13:22:45 -07:00
relrelb 281455be6d swf: Improve `ActionTry` read/write
* Use `TryFlags` instead of hard-coded binary literals.
* Rename `try_length`, `catch_length`, `finally_length` to `try_size`,
`catch_size`, `finally_size` to match SWF19 namings.
* Refactor write and fix a few bugs there:
    * The actions length should not include the try, catch, finally
    bodies, only the metadata of `flags`, `try_size`, `catch_size`,
    `finally_size` and catch variable (either as `u8` or `SwfStr`).
    * A placeholder byte should be written in place of the catch variable
    when there is no catch clause.
2021-10-02 23:01:32 +03:00
relrelb d49ea10267 swf: Rename `TryBlock` fields
* `try_actions` -> `try_body`
* `catch` -> `catch_body`
* `finally` -> `finally_body`

This aligns with the names used in SWF19, and is more consistent.
2021-10-02 23:01:32 +03:00
relrelb d2908d8fcd swf: Fix write of With opcode
The actions length should be written as an additional u16.
2021-10-02 23:01:32 +03:00
TÖRÖK Attila a1ee508ff8
chore: Fix nightly clippy lint: clippy::if_then_panic (#5400)
* chore: Fix nightly clippy lint: clippy::if_then_panic

* chore: Fix nightly clippy lint: clippy::if_then_panic in swf tests too

* Address review notes
2021-10-02 16:14:53 +03:00
Giles Cope 42c2b40052 unused deps 2021-09-18 15:28:24 +02:00
Chris Midgley 2dd83c23e8 avm2: add more opcodes
Taken from https://jindrapetrik.github.io/as3_pcode_instructions.en.html
2021-09-16 02:51:04 -07:00
Chris Midgley d52a350b9b avm2: reorder opcodes to be alphabetical 2021-09-16 02:51:04 -07:00
David Wendt 535f4fba58 swf: Pre-allocate the parameters when parsing a `TypeName` 2021-09-02 17:57:58 -06:00
David Wendt 62be772649 chore: Compliance with current clippy beta/nightly 2021-09-02 17:57:58 -06:00
David Wendt 9dafddc1ae swf: Decode and encode the `applytype` op. 2021-09-02 17:57:58 -06:00
David Wendt 47e3b2229a swf: Add support for the `TypeName` multiname type. 2021-09-02 17:57:58 -06:00
relrelb 55ffda9c97 swf: Take advantage of `ClipEventFlag` bit pattern
Re-number the `ClipEventFlag` enum members to match how they
actually appear in a SWF. This allows much simpler read/write
operations.

Also, gracefully handle malformed ClipActions that are only 1 or 0
bytes, as it seems that Flash accepts those too.
2021-08-30 21:23:18 +03:00
Tal Hayon 7b9049cedf core: Add DefineBinaryData and SymbolClass connection (Part of #1368) 2021-08-21 12:24:46 -06:00
dependabot[bot] b8a9e28acb chore: Bump bitstream-io from 1.1.0 to 1.2.0
Bumps [bitstream-io](https://github.com/tuffy/bitstream-io) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/tuffy/bitstream-io/releases)
- [Commits](https://github.com/tuffy/bitstream-io/compare/v1.1.0...v1.2.0)

---
updated-dependencies:
- dependency-name: bitstream-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-17 08:24:29 +03:00
dependabot[bot] a317a09d17 chore: Bump bitflags from 1.2.1 to 1.3.2
Bumps [bitflags](https://github.com/bitflags/bitflags) from 1.2.1 to 1.3.2.
- [Release notes](https://github.com/bitflags/bitflags/releases)
- [Changelog](https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bitflags/bitflags/compare/1.2.1...1.3.2)

---
updated-dependencies:
- dependency-name: bitflags
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-16 23:41:06 +03:00
relrelb 3d8779b377 swf: Ignore length mismatch in `read_action`
Flash continues in such case, so just warn instead of failing.
2021-08-03 14:40:59 -07:00
relrelb 04af276ecb swf: Extract `Opcode::format` and `TagCode::format` 2021-08-03 14:40:59 -07:00
Chris Midgley 0c6f7101b8 docs: update swf README to have working examples 2021-08-03 12:04:58 -07:00
David Wendt 7dc86fdeb0 swf: Throw an error if an ABC bitstream calls for a parameter with more optional parameters than actual ones. 2021-07-20 22:10:30 -04:00
David Wendt 4122c1b96e swf: Default method parameters are indexed starting from the first optional parameter, not from zero. 2021-07-20 22:05:29 -04:00
relrelb d2eb46d3be chore: Reserve capacity for vectors
This avoids unnecessary re-allocations and thus should improve
performance in both memory and time terms.
2021-07-20 16:25:23 -07:00
relrelb 5dde3ecabf swf: Optimize `read_f64_me` and `write_f64_me`
Each function is reduced to just 3 opcodes on x86:
https://godbolt.org/z/n6q6zxnh6

WebAssembly benefits as well: https://godbolt.org/z/fcETE9GYn

This should improve load-time performance because read_f64_me is
used frequently (for each AVM1 double constant).
2021-07-16 01:29:49 +03:00
relrelb c2378416a9 tests: Simplify `read_tag_bytes_from_file_with_index`
Let the `Reader` outlive outside the loop, so it tracks its own
position, instead of doing so manually.
Also move `read_from_file` outside and reuse it.
2021-07-12 23:09:29 +03:00
relrelb 99deb90a1f swf: Avoid using `Reader::input` directly
Change two cases to use `Reader::read_slice` instead of `self.input`.
Not only this avoids relying on an implementation detail, this also
raises an `UnexpectedEof` error if the read is beyond the SWF.
2021-07-12 23:09:29 +03:00
relrelb ef9c073d26 swf: General cleanup
Just mechanical cleanups to ease future refactors.
2021-07-12 23:09:29 +03:00
relrelb 9e18e32b40 swf: Fix read_i24
Only the third byte should be cast to i8 in order to sign extend correctly.
avmplus reference: https://github.com/adobe/avmplus/blob/master/core/AvmCore-inlines.h#L387-L395
2021-07-09 19:56:52 +03:00
relrelb 32c6d8dba0 swf: Fix write_i24
It was writing in the wrong endian.
2021-07-09 19:56:52 +03:00
relrelb 1cbbdecccf swf: Introduce and use `Color::to_rgba` 2021-07-09 19:56:52 +03:00
relrelb 580d8c3562 chore: Use to_le_bytes in more places 2021-07-09 19:56:52 +03:00
relrelb 87e9dda250 chore: Use from_le_bytes in more places 2021-07-09 19:56:52 +03:00
relrelb 169c79fa3a chore: Minor cleanups 2021-06-26 23:05:11 +03:00
relrelb 9c1ebc7f20 swf: Cleanup Error 2021-06-26 23:05:11 +03:00
relrelb 7b37bf6809 chore: Avoid spelling "movieclip"
* Prefer "MovieClip" in comments.
* Prefer "mc" for variable names.
2021-06-24 14:36:45 +03:00
relrelb 0fd1c05fd5 chore: Use into() in more places 2021-06-22 11:49:41 -07:00
Mike Welsh 56c260fa74 swf: Add NameCharacter tag 2021-06-20 14:01:07 -07:00
dependabot[bot] c22c18b809 chore: Bump bitstream-io from 1.0.0 to 1.1.0
Bumps [bitstream-io](https://github.com/tuffy/bitstream-io) from 1.0.0 to 1.1.0.
- [Release notes](https://github.com/tuffy/bitstream-io/releases)
- [Commits](https://github.com/tuffy/bitstream-io/commits)

---
updated-dependencies:
- dependency-name: bitstream-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-20 03:10:31 -07:00
Mike Welsh 21c351fe5b swf: Change Twips::zero fn to Twips::ZERO const 2021-06-08 14:57:15 -07:00
Mike Welsh d23ea90459 swf: Change Matrix to use Fixed16 for a, b, c, d
Matrices in an SWF file store their scale/skew components in
in 16.16 format (fbits).

Split `ruffle_core::Matrix` and `swf::Matrix`. `swf::Matrix` now
stores its data as `Fixed16` instead of immediately converting to
`f32`.
2021-06-08 14:57:15 -07:00
dependabot[bot] 2f1dc0cbb1 chore: Bump approx from 0.4.0 to 0.5.0
Bumps [approx](https://github.com/brendanzab/approx) from 0.4.0 to 0.5.0.
- [Release notes](https://github.com/brendanzab/approx/releases)
- [Commits](https://github.com/brendanzab/approx/compare/v0.4.0...v0.5.0)

---
updated-dependencies:
- dependency-name: approx
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-07 11:30:59 -07:00
relrelb b8eae51888 swf: Move num_colors into BitmapFormat::ColorMap8 2021-06-07 11:29:28 -07:00
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