Fix missing PSD Layer Id

This commit is contained in:
manongjohn 2022-04-20 09:37:09 -04:00
parent f849f1cd67
commit ce8d45c752
3 changed files with 15 additions and 2 deletions

View file

@ -220,8 +220,8 @@ bool TPSDReader::doLayersInfo() {
m_headerInfo.layersCount = -m_headerInfo.layersCount; m_headerInfo.layersCount = -m_headerInfo.layersCount;
} }
if (!m_headerInfo.linfoBlockEmpty) { if (!m_headerInfo.linfoBlockEmpty) {
m_headerInfo.linfo = (TPSDLayerInfo *)mymalloc( m_headerInfo.linfo = (TPSDLayerInfo *)mycalloc(
m_headerInfo.layersCount * sizeof(struct TPSDLayerInfo)); m_headerInfo.layersCount, sizeof(struct TPSDLayerInfo));
int i = 0; int i = 0;
for (i = 0; i < m_headerInfo.layersCount; i++) { for (i = 0; i < m_headerInfo.layersCount; i++) {
readLayerInfo(i); readLayerInfo(i);
@ -306,6 +306,9 @@ bool TPSDReader::readLayerInfo(int i) {
} }
// process layer's 'additional info' // process layer's 'additional info'
// Assumption: File will provide all layerIds or none at all.
// Set layer id, for now, knowing it may be overwritten if found in file
li->layerId = i + 1;
li->additionalpos = ftell(m_file); li->additionalpos = ftell(m_file);
li->additionallen = extrastart + extralen - li->additionalpos; li->additionallen = extrastart + extralen - li->additionalpos;

View file

@ -136,6 +136,15 @@ void *mymalloc(long n) {
return NULL; return NULL;
} }
void *mycalloc(long n, int size) {
void *p = calloc(n, size);
if (p)
return p;
else {
// ALLOCATION ERROR
}
return NULL;
}
// ZIP COMPRESSION // ZIP COMPRESSION
// ZIP WITHOUT PREDICTION // ZIP WITHOUT PREDICTION

View file

@ -36,6 +36,7 @@ void readrow(FILE *psd, TPSDChannelInfo *chan, psdPixel rowIndex,
void skipBlock(FILE *f); void skipBlock(FILE *f);
void *mymalloc(long n); void *mymalloc(long n);
void *mycalloc(long n, int size);
unsigned read2UBytes(FILE *f); unsigned read2UBytes(FILE *f);
int read2Bytes(FILE *f); int read2Bytes(FILE *f);
long read4Bytes(FILE *f); long read4Bytes(FILE *f);