On Mon, 22 Jul 2024 18:08:52 GMT, Eirik Bjørsnøs <eir...@openjdk.org> wrote:
>>> The term "extra" here feels somewhat open to interpretation. Specifically, >>> "extra" sounds like something that is out of the ordinary, but not uncommon >>> or wrong. It could be used when describing an optional feature in a format >>> specification. >>> >>> The API description referes to "unexpected data". Perhaps the word >>> "unexpected" is a more precise and descriptive term to use in this option? >>> So ignoreUnexpectedBytes or ignoreUnexpectedData. >> >> This is a good point.. because it's actually a bit subtle what kind of data >> is being referred to here as being "ignored". Even "unexpected" doesn't >> quite capture it. >> >> To be precise, here's what bytes the `ignoreExtraBytes` parameter is going >> to cause to be ignored: >> * In the case `allowConcatenation == false`, it really does refer to "extra" >> or "extraneous" data, that is: one or more bytes having any value appearing >> _after_ the end of the GZIP trailer frame. >> * In the case `allowConcatenation == true`, it means a truncated or invalid >> GZIP _header frame_ appearing after the end of any GZIP trailer frame. >> >> The second case means "unexpected" seems wrong because why would unexpected >> data in a header frame be treated any differently from unexpected data any >> other frame (which of course is not going to be ignored but instead will >> trigger an exception)? >> >> So maybe this is just more evidence that we shouldn't use boolean parameters >> - because they're not really orthogonal. >> >> What about something like: >> >> >> public enum ConcatPolicy { >> DISALLOW_STRICT, // one GZIP stream, nothing else >> DISALLOW_LENIENT, // one GZIP stream, ignore any extra byte(s) >> ALLOW_STRICT, // N GZIP streams, nothing else >> ALLOW_LENIENT; // N GZIP streams, stop at, and ignore, an invalid >> header frame >> } >> >> The legacy behavior would of course correspond to `ALLOW_LENIENT`. > > Another thought: > > Are we sure we would want to introduce a new mode now which does _not_ allow > concatenation, but _does_ ignore trailing data? > > If the ignore mode is really discouraged, why open a new mode of config > allowing it? > > In other words, could we instead (at least conceptually) have the policies > LEGACY, SINGLE_STREAM, CONCATENATED_STREAM where the latter two always reject > trailing data? > Are we sure we would want to introduce a new mode now which does not allow > concatenation, but does ignore trailing data? I don't see it as necessary. It's certainly not a case that anyone is currently relying on. So it's fine with me to omit it. If are calling this a "concatenated stream policy" then we could have: public enum ConcatPolicy { DISALLOW, ALLOW, ALLOW_LENIENT; } (I'm avoiding `LEGACY` which makes sense today but might make less sense N years from now.) ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/18385#discussion_r1687042483