[PATCH] Fix 32-bit overflow in Divesoft Freedom time handling
Anton Lundin
glance at acc.umu.se
Sat Oct 3 08:05:26 PDT 2015
On 03 October, 2015 - Anton Lundin wrote:
> On 02 October, 2015 - Linus Torvalds wrote:
>
> > Commit 31fb2e4c62ab ("Avoid possible sign extension") handled the
> > problem when a "unsigned char" is shifted 24 bits left, and becomes a
> > "signed int". By casting the result to uint32_t, that signed case won't
> > happen.
> >
>
> The root bug was mine. Another one of C's wonderful things that i didn't
> know about.
>
> > Of course, it's not at all clear that the 32-bit number is actually
> > unsigned to begin with. Maybe it's meant to be signed, the way
> > traditional 32-bit unix time_t is. Maybe the Divesoft Freedom was
> > designed to also be able to import dives from before Jan 1, 2000. Who
> > knows? Not me. I've never seen one of those things.
> >
>
> Most of the work to import the Divesoft files was done by
> reverse-engineering, but after a while we got a answer from the Divesoft
> folks with a C header containing structs, enums and typedef's on how the
> format actually looks.
>
> The tings we never managed to figure out was corrected then. One real
> gotcha was the 10-bit signed temp field in 0.1 C. I'd never managed to
> guess that it was 10-bit.
>
>
> Anyhow, the dive start timestamp is a 32-bit signed in seconds since
> 2000-01-01 00:00:00, according to the header file and the comments in
> it.
>
Fu. I looked at the wrong typedef. their time stamp is actually
uint32_t.
Sorry for the confusion.
//Anton
--
Anton Lundin +46702-161604
More information about the subsurface
mailing list