--- /dev/null
+Index: /trunk/gdal/frmts/nitf/nitfrasterband.cpp\r
+===================================================================\r
+--- a/frmts/nitf/nitfrasterband.cpp (revision 38657)\r
++++ b/frmts/nitf/nitfrasterband.cpp (revision 38658)\r
+@@ -824,4 +826,20 @@\r
+ pUnpackData[i+7] = ((pDataSrc[k+2]) & 0x7);\r
+ }\r
++ if( i < n )\r
++ {\r
++ pUnpackData[i+0] = ((pDataSrc[k+0] >> 5));\r
++ if( i + 1 < n )\r
++ pUnpackData[i+1] = ((pDataSrc[k+0] >> 2) & 0x07);\r
++ if( i + 2 < n )\r
++ pUnpackData[i+2] = ((pDataSrc[k+0] << 1) & 0x07) | (pDataSrc[k+1] >> 7);\r
++ if( i + 3 < n )\r
++ pUnpackData[i+3] = ((pDataSrc[k+1] >> 4) & 0x07);\r
++ if( i + 4 < n )\r
++ pUnpackData[i+4] = ((pDataSrc[k+1] >> 1) & 0x07);\r
++ if( i + 5 < n )\r
++ pUnpackData[i+5] = ((pDataSrc[k+1] << 2) & 0x07) | (pDataSrc[k+2] >> 6);\r
++ if( i + 6 < n )\r
++ pUnpackData[i+6] = ((pDataSrc[k+2] >> 3) & 0x07);\r
++ }\r
+ \r
+ memcpy(pData, pUnpackData, n);\r
+@@ -842,4 +862,20 @@\r
+ pUnpackData[i+7] = ((pDataSrc[k+4]) & 0x1f);\r
+ }\r
++ if( i < n )\r
++ {\r
++ pUnpackData[i+0] = ((pDataSrc[k+0] >> 3));\r
++ if( i + 1 < n )\r
++ pUnpackData[i+1] = ((pDataSrc[k+0] << 2) & 0x1f) | (pDataSrc[k+1] >> 6);\r
++ if( i + 2 < n )\r
++ pUnpackData[i+2] = ((pDataSrc[k+1] >> 1) & 0x1f);\r
++ if( i + 3 < n )\r
++ pUnpackData[i+3] = ((pDataSrc[k+1] << 4) & 0x1f) | (pDataSrc[k+2] >> 4);\r
++ if( i + 4 < n )\r
++ pUnpackData[i+4] = ((pDataSrc[k+2] << 1) & 0x1f) | (pDataSrc[k+3] >> 7);\r
++ if( i + 5 < n )\r
++ pUnpackData[i+5] = ((pDataSrc[k+3] >> 2) & 0x1f);\r
++ if( i + 6 < n )\r
++ pUnpackData[i+6] = ((pDataSrc[k+3] << 3) & 0x1f) | (pDataSrc[k+4] >> 5);\r
++ }\r
+ \r
+ memcpy(pData, pUnpackData, n);\r
+@@ -856,4 +894,12 @@\r
+ pUnpackData[i+3] = ((pDataSrc[k+2]) & 0x3f);\r
+ }\r
++ if( i < n )\r
++ {\r
++ pUnpackData[i+0] = ((pDataSrc[k+0] >> 2));\r
++ if( i + 1 < n )\r
++ pUnpackData[i+1] = ((pDataSrc[k+0] << 4) & 0x3f) | (pDataSrc[k+1] >> 4);\r
++ if( i + 2 < n )\r
++ pUnpackData[i+2] = ((pDataSrc[k+1] << 2) & 0x3f) | (pDataSrc[k+2] >> 6);\r
++ }\r
+ \r
+ memcpy(pData, pUnpackData, n);\r
+@@ -873,4 +921,20 @@\r
+ pUnpackData[i+6] = ((pDataSrc[k+5] << 1) & 0x7f) | (pDataSrc[k+6] >> 7);\r
+ pUnpackData[i+7] = ((pDataSrc[k+6]) & 0x7f);\r
++ }\r
++ if( i < n )\r
++ {\r
++ pUnpackData[i+0] = ((pDataSrc[k+0] >> 1));\r
++ if( i + 1 < n )\r
++ pUnpackData[i+1] = ((pDataSrc[k+0] << 6) & 0x7f) | (pDataSrc[k+1] >> 2);\r
++ if( i + 2 < n )\r
++ pUnpackData[i+2] = ((pDataSrc[k+1] << 5) & 0x7f) | (pDataSrc[k+2] >> 3) ;\r
++ if( i + 3 < n )\r
++ pUnpackData[i+3] = ((pDataSrc[k+2] << 4) & 0x7f) | (pDataSrc[k+3] >> 4);\r
++ if( i + 4 < n )\r
++ pUnpackData[i+4] = ((pDataSrc[k+3] << 3) & 0x7f) | (pDataSrc[k+4] >> 5);\r
++ if( i + 5 < n )\r
++ pUnpackData[i+5] = ((pDataSrc[k+4] << 2) & 0x7f) | (pDataSrc[k+5] >> 6);\r
++ if( i + 6 < n )\r
++ pUnpackData[i+6] = ((pDataSrc[k+5] << 1) & 0x7f) | (pDataSrc[k+6] >> 7);\r
+ }\r
+ \r
--- /dev/null
+Index: trunk/gdal/frmts/nitf/nitffile.c\r
+===================================================================\r
+--- a/frmts/nitf/nitffile.c (revision 38085)\r
++++ b/frmts/nitf/nitffile.c (revision 38234)\r
+@@ -350,5 +350,6 @@\r
+ if (nOffset != -1)\r
+ nOffset = NITFCollectSegmentInfo( psFile, nHeaderLen, nOffset, "RE", 4, 7, &nNextData);\r
+- else\r
++\r
++ if( nOffset < 0 )\r
+ {\r
+ NITFClose(psFile);\r