405 Commits

Author SHA1 Message Date
Dustin Oprea
05e8551e57 Update package documentation to cite obsolescence 2020-05-05 02:45:22 -04:00
Dustin Oprea
36f5ad93e8 gps.go: Add Raw() method to GpsInfo to assisting with writing
- Moved some GPS logic from ifd_enumerate.go to gps.go .
- Added missing comments.
2020-05-05 02:28:56 -04:00
Dustin Oprea
f86f12408b exif.go: Update funky recover clauses 2020-05-05 02:27:31 -04:00
Dustin Oprea
4fc876786f exif.go: Brute-force EXIF searching is now buffered
- Added `SearchAndExtractExifWithReader()`.
- `SearchFileAndExtractExif()` now calls `SearchAndExtractExifWithReader()`
  instead of reading the whole image first.

Fixes #34

Relates to optimizations in df264b3 as well.
2020-05-05 01:27:20 -04:00
Dustin Oprea
df264b321a exif.go: Use simple byte comparison to match signature 2020-05-05 00:58:01 -04:00
Dustin Oprea
3e77768f35 README.md: Further qualify attribution list 2020-05-03 02:22:16 -04:00
Dustin Oprea
cc316fb440 ifd_enumerate.go: (*Ifd).PrintTagTree() no longer fails on parseable undefined values
https://github.com/dsoprea/go-exif/issues/33
2020-05-02 17:11:50 -04:00
Dustin Oprea
6aea10b45f exif-read-tool: Skip unparseable undefined tags
We've encountered a malformed user-comments value in an image from a
Canon EOS 5D Mark II.

2020/05/02 16:28:58 exifjpeg.ifd: [DEBUG]  Parsing IFD [IFD/Exif] (0) at offset (0102).
2020/05/02 16:28:58 exifjpeg.ifd: [DEBUG]  Current IFD tag-count: (33)
2020/05/02 16:28:58 main.main: [WARNING]  Skipping unparseable undefined tag: [IFD/Exif] (9286)
2020/05/02 16:28:58 exifjpeg.ifd: [DEBUG]  Descending to IFD [IFD/Exif/Iop].
2020/05/02 16:28:58 exifjpeg.ifd: [DEBUG]  Parsing IFD [IFD/Exif/Iop] (0) at offset (a164).

Fixes #33
2020-05-02 16:33:40 -04:00
Dustin Oprea
76619923f4 exif-read-tool: Fix verbosity. Replace prints with logging.
It's just an example tool, but still.
2020-05-02 16:25:36 -04:00
Dustin Oprea
80e3b12b98 undefined/exif_9286_user_comment.go: Validate for minimum user-notes size 2020-05-02 16:24:00 -04:00
Dustin Oprea
45986dbda3 Now a specific error for unparseable undefined tags 2020-05-02 16:23:19 -04:00
Dustin Oprea
73303ea590 go.mod: Bump version of go-logging 2020-05-02 16:21:52 -04:00
Dustin Oprea
640175a69f exif-read-tool: Skip unsupported undefined tags 2020-03-21 18:53:14 -04:00
Dustin Oprea
1e1e1ed104 exif-read-tool: Make no-exif error nicer for tool 2020-03-21 18:52:41 -04:00
Dustin Oprea
bd04addaf4 v2/common/parser.go: Revert to previous NUL forgiveness
It turns out that there is so much loose handling with the terminating
NUL characters out there that there's a societal breakdown without this.

Fixes #31
2020-01-26 00:26:15 -05:00
Dustin Oprea
bc34ca087b exif-read-tool/main_test.go: Bugfix for missing error check 2020-01-25 23:30:30 -05:00
Dustin Oprea
0bbb7a3584 ifd_enumerate.go: Revert to using a simple function for the visitor 2020-01-13 18:12:07 -05:00
Dustin Oprea
90b66e3d11 Renamed V2 constant
From ErrUnhandledUnknownTypedTag to ErrUnhandledUndefinedTypedTag. The
release just happened. There should be minimal fallout.
2020-01-13 13:44:00 -05:00
Dustin Oprea
b7b73dfdaf Yanked go-exif from our own dependencies
Not sure how that got there.
2020-01-13 12:04:04 -05:00
Dustin Oprea
eee9ff13c7 Removed init()'s from tests so they don't run when imported
Otherwise they'll break for other projects' tests. We now initialize our
paths on-demand, which will only happen when running from our own tests.
2020-01-13 12:00:23 -05:00
Dustin Oprea
0d58b5da07 README.md: Update for v2 2020-01-12 18:56:35 -05:00
Dustin Oprea
106cad7062 Add tests for remaining undefined types
- Also fixed a typeo in several recopied error messages.
2020-01-12 18:56:35 -05:00
Dustin Oprea
ebd20ffc59 Do not include v1/legacy in coverage 2020-01-12 18:56:35 -05:00
Dustin Oprea
25524615d1 Fix for type-embedded strings not being encoded to JSON correctly in earlier Go's 2020-01-12 18:56:35 -05:00
Dustin Oprea
3b18b2295e common/testing_common.go: Tighten error checking for module-find 2020-01-12 18:56:35 -05:00
Dustin Oprea
db9a0b3a24 common/testing_common.go: Add verbosity for module-path find failure 2020-01-12 18:56:35 -05:00
Dustin Oprea
817d4b2856 Fix module resolution with subpackages
exif-read-tool/main_test.go: Fix test broken by moving to V2.
2020-01-12 18:56:35 -05:00
Dustin Oprea
41fd3ae870 undefined: Add five test suites 2020-01-12 18:56:35 -05:00
Dustin Oprea
a52d1de840 undefined: Add three suites of tests 2020-01-12 18:56:35 -05:00
Dustin Oprea
4fd78f1397 README.md: Tweaked comment regarding undefined-value 0xa40b 2020-01-12 18:56:35 -05:00
Dustin Oprea
74208315f8 ifd_tag_entry.go: Embellished ChildFqIfdPath comment 2020-01-12 18:56:35 -05:00
Dustin Oprea
307a31d82b exif-read-tool: Upgraded to v2 module 2020-01-12 18:56:35 -05:00
Dustin Oprea
fa4e784620 ifd_tag_entry.go: Renamed unexported getter to be nicer 2020-01-12 18:56:35 -05:00
Dustin Oprea
7d26e69f8d Add tested for undefined-tag types 2020-01-12 18:56:35 -05:00
Dustin Oprea
f72daedddc ifd_enumerate.go: Ifd no longer needs addressableBytes field 2020-01-12 18:56:35 -05:00
Dustin Oprea
556a15dbee ifd_tag_entry.go: Minor change to use own field directly 2020-01-12 18:56:35 -05:00
Dustin Oprea
1a430b7457 ifd_enumerate.go: Drop (*Ifd).Value and .FormatValue()
This can and should be done directly on the ITEs themselves.
2020-01-12 18:56:35 -05:00
Dustin Oprea
0c670ca7c2 ifd_tag_entry.go: Renamed RawBytes() to GetRawBytes()
It used to be a simple getter but now it does stuff.
2020-01-12 18:56:35 -05:00
Dustin Oprea
173d686dd9 Visit interface now just gets the ITE struct
That, rather than just a couple of values from it. Primarily because we
want to not have callers involve themselves with the value context
unless they want to.

- ifd_tag_entry.go: ITEs now provide `Format()` and `FormatFirst()`
  methods.

- We dumped several spots of code that could just reuse functions to
  format, decode, or get raw bytes rather than dealing with undefined
  vs not undefined logic themselves.

  - This is now possible due to prior change.

- ifd_tag_entry.go: No longer exports GetValueContext(). Users shouldn't
  usually have to touch it, now.

- Added some commenting.

This commit almost represents everything we have been trying to achieve,
now made possible by the last several commits.
2020-01-12 18:56:35 -05:00
Dustin Oprea
1bdfa9b10e Empower ITEs to resolve values and raw bytes directly
They'll also now embed all of the information they need to know since it
is all known where the ITEs are created. This prevents the user from
having to be involved in it. This makes it much more straightforward and
enjoyable to use.

- ifd_tag_entry.go
  - newIfdTagEntry now takes and embeds `addressableBytes` and
    `byteOrder`.
  - We've dumped the `value` member that let the caller preload a parsed
    value (or bytes?). It's no longer necessary since this led to
    inconsistencies and the ITE can produce these values directly, now.
  - `Value()` obviously no longer takes `addressableValue` and
    `byteOrder` since now embedded.
  - `Value()` will now see and return ErrUnhandledUnknownTypedTag
    directly (not wrapping it, since this is a handled case).

- common/type.go: FormatFromType now uses Stringer as a fallback if
  possible. All undefined-tag wrapper types implement it, so the same
  function can handle both undefined and non-undefined values, and the
  individual types can control the strings presented in simple listing.

- Dropped "resolveValue" parameters from all of the collect, visit, and
  parsing functions. Resolution is now a later step performed by the
  caller on the ITEs, directly.

  - This parameter was protection against undefined-type values
    disrupting simple enumeration, but now the user can simply produce
    the list of tags and can either choose to decode their value or not,
    directly. If they do, they, as of earlier, recent commits, also have
    the ability to properly manage unhandled undefined-values so they
    don't crash.

- The ITEs can now create ValueContext structs directly
  (GetValueContext()), though it might not be necessary now that the
  ITEs can produce the values and encodings directly.

  - This also allowed us to dump several other GetValueContext()
    implementations elsewhere since it is now self-reliant on this type
    and those methods were essentially kludges for the lack of this.

- Dump a bunch of "Value" methods from ITEs which just weren't useful or
  simple enough. Replaced by the above.

- Fixed `(Ifd).String()` to have a pointer receiver.
2020-01-12 18:56:35 -05:00
Dustin Oprea
e7e1e89ffb undefined/accessor.go: Drop unnecessary parameters from Decode() 2020-01-12 18:56:35 -05:00
Dustin Oprea
6554f89879 common/type.go: Rename Format() to FormatFromBytes() 2020-01-12 18:56:35 -05:00
Dustin Oprea
82afccee6b Removed concept of ITEVRs
This was from a time long past, from the beginning of the project, and
was just an ineffective bandaid that made things complicated.
2020-01-12 18:56:35 -05:00
Dustin Oprea
9441507683 common/parser.go: An ASCII string not being terminated with NUL now panics
This likely means an offset error or something else that's very bad. We
shouldn't be forgiving it.
2020-01-12 18:56:35 -05:00
Dustin Oprea
351f1b7549 undefined/type.go: Formalized requirement for undefined-types being Stringers 2020-01-12 18:56:35 -05:00
Dustin Oprea
9a4bd45d39 undefined/type.go: Drop TagUndefinedType_UnknownValue
Not used anywhere
2020-01-12 18:56:35 -05:00
Dustin Oprea
d293fcac9c undefined/exif_8828_oecf.go: Add Encode() 2020-01-12 18:56:35 -05:00
Dustin Oprea
f7701a222a ifd_enumerator.go: Drop resolveTagValue
Was only used in one place and it's just a redundancy.
2020-01-12 18:56:35 -05:00
Dustin Oprea
32a5d88770 New integration of common/ and undefined/ subpackages
- common/type.go: Add FormatFromType() .
- Renamed common/type_encode.go to common/value_encoder.go .
2020-01-12 18:56:35 -05:00
Dustin Oprea
5c7dc45079 Added all tests for type.go, type_encode.go, parser.go, value_context.go, and utility.go
- Add .MODULE_ROOT anchor file to support testing.
2020-01-12 18:56:35 -05:00