[Gdcm-hackers] gdcm-git:Grassroots DICOM branch release updated. 4c60e6df1a774e41ea35a957e20277aac4
Cross-platform DICOM implementation
Brought to you by:
malat
|
From: Mathieu M. <ma...@us...> - 2022-09-14 10:01:34
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Grassroots DICOM".
The branch, release has been updated
via 4c60e6df1a774e41ea35a957e20277aac4bbeefb (commit)
via 34baf78dc0b2ff56e1fccc0a9eacfe876713ea41 (commit)
from 5012ca424ab5cf8dcf3f8b7a9ef9d86ece835811 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://sourceforge.net/p/gdcm/gdcm/ci/4c60e6df1a774e41ea35a957e20277aac4bbeefb/
commit 4c60e6df1a774e41ea35a957e20277aac4bbeefb
Author: Mathieu Malaterre <mat...@gm...>
Date: Wed Sep 14 12:00:19 2022 +0200
Rework csa logic
diff --git a/Utilities/gdcmext/csa.c b/Utilities/gdcmext/csa.c
index b5d4031c9..ffee00f91 100644
--- a/Utilities/gdcmext/csa.c
+++ b/Utilities/gdcmext/csa.c
@@ -137,13 +137,16 @@ static bool read_magic(struct app *self) {
// Handle very special case hopefully no conflict with case of no-magic
if (n == 0x30315653 && unused == 0x01020304) { // aka 'SV10'
+ // SIEMENS_CSA2.dcm
s = fread_mirror(&n, sizeof n, 1, self);
ERROR_RETURN(s, 1);
+ ERROR_RETURN(n < 0x100, true);
s = fread_mirror(&unused, sizeof unused, 1, self);
ERROR_RETURN(s, 1);
ERROR_RETURN(unused, 0x4d); // 'M'
magic = SV10;
} else if (n < 0x100 && unused == 0x4d) { // 'M'
+ // SIEMENS_Sonata-16-MONO2-Value_Multiplicity.dcm
magic = NOMAGIC;
} else if (n == 0x7364703c && unused == 0x6f633c3e) { // aka '<pds><co'
// 'PET_REPLAY_PARAM'
@@ -169,14 +172,27 @@ static bool write_trailer(struct app *self) {
uint32_t unused;
s = fread_mirror(&unused, sizeof unused, 1, self);
ERROR_RETURN(s, 1);
+ ERROR_RETURN(unused, 0);
} else if (self->csa_type == NOMAGIC) {
- // no magic
+ // no magic. seems to contains some kind of data, hopefully no PHI
+#if 1
uint32_t i;
for (i = 0; i < 28u; ++i) {
uint32_t unused;
s = fread_mirror(&unused, sizeof unused, 1, self);
ERROR_RETURN(s, 1);
}
+#else
+ char unused[28 * 4];
+ s = fread_mirror(unused, sizeof *unused, sizeof unused / sizeof *unused,
+ self);
+ ERROR_RETURN(s, 28 * 4);
+ int i;
+ for (i = 0; i < 4 * 28; ++i) {
+ const char c = unused[i];
+ assert(c == 0x0 || c == ' ' || c == '.' || (c >= '0' && c <= '9'));
+ }
+#endif
} else {
assert(0);
return false;
@@ -221,6 +237,7 @@ static bool read_info(struct app *self, struct csa_info *i) {
uint32_t unused;
s = fread_mirror(&unused, sizeof unused, 1, self);
ERROR_RETURN(s, 1);
+ ERROR_RETURN(unused == 0x4d || unused == 0xcd, true);
}
return true;
@@ -234,6 +251,7 @@ static bool read_data(struct app *self, struct csa_item_data *d) {
uint32_t unused;
s = fread_mirror(&unused, sizeof unused, 1, self);
ERROR_RETURN(s, 1);
+ assert(unused == d->len || unused == 0x4d);
}
if (d->len != 0) {
@@ -241,6 +259,8 @@ static bool read_data(struct app *self, struct csa_item_data *d) {
const uint32_t padded_len = ((d->len + 3u) / 4u) * 4u; // (len + 3) & ~0x03
assert(padded_len == d->len + padding_len); // programmer error
d->buffer = (char *)realloc(d->buffer, padded_len);
+ assert(padded_len != 0);
+ ERROR_RETURN(d->buffer != NULL, true);
s = fread_mirror(d->buffer, sizeof *d->buffer, padded_len, self);
ERROR_RETURN(s, padded_len);
}
https://sourceforge.net/p/gdcm/gdcm/ci/34baf78dc0b2ff56e1fccc0a9eacfe876713ea41/
commit 34baf78dc0b2ff56e1fccc0a9eacfe876713ea41
Author: Mathieu Malaterre <mat...@gm...>
Date: Wed Sep 14 11:14:23 2022 +0200
Add extra checks
diff --git a/Utilities/gdcmext/csa.c b/Utilities/gdcmext/csa.c
index da9757d95..b5d4031c9 100644
--- a/Utilities/gdcmext/csa.c
+++ b/Utilities/gdcmext/csa.c
@@ -141,15 +141,17 @@ static bool read_magic(struct app *self) {
ERROR_RETURN(s, 1);
s = fread_mirror(&unused, sizeof unused, 1, self);
ERROR_RETURN(s, 1);
+ ERROR_RETURN(unused, 0x4d); // 'M'
magic = SV10;
} else if (n < 0x100 && unused == 0x4d) { // 'M'
magic = NOMAGIC;
- } else if (n == 0x7364703c && unused == 0x6f633c3e) // aka '<pds><co'
- {
+ } else if (n == 0x7364703c && unused == 0x6f633c3e) { // aka '<pds><co'
// 'PET_REPLAY_PARAM'
+ assert(0);
return false;
} else if (n == 0x31305356 && unused == 0x2010403) { // aka 'VS01' ...
// technically could be reserved; should not happen in the wild
+ assert(0);
return false;
} else {
assert(0);
-----------------------------------------------------------------------
Summary of changes:
Utilities/gdcmext/csa.c | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
hooks/post-receive
--
Grassroots DICOM
|