Coverage Report

Created: 2026-05-16 07:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/imagemagick/coders/bytebuffer-private.h
Line
Count
Source
1
/*
2
  Copyright @ 1999 ImageMagick Studio LLC, a non-profit organization
3
  dedicated to making software imaging solutions freely available.
4
5
  You may not use this file except in compliance with the License.  You may
6
  obtain a copy of the License at
7
8
    https://imagemagick.org/license/
9
10
  Unless required by applicable law or agreed to in writing, software
11
  distributed under the License is distributed on an "AS IS" BASIS,
12
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
  See the License for the specific language governing permissions and
14
  limitations under the License.
15
*/
16
#ifndef MAGICK_BYTE_BUFFER_PRIVATE_H
17
#define MAGICK_BYTE_BUFFER_PRIVATE_H
18
19
#include "MagickCore/blob.h"
20
#include "MagickCore/blob-private.h"
21
22
typedef struct _MagickByteBuffer
23
{
24
  Image
25
    *image;
26
27
  ssize_t
28
    offset,
29
    count;
30
31
  unsigned char
32
    data[MagickMinBufferExtent];
33
} MagickByteBuffer;
34
35
static inline int PeekMagickByteBuffer(MagickByteBuffer *buffer)
36
12.6M
{
37
12.6M
  if ((buffer->offset == buffer->count) && (buffer->offset > 0))
38
24.5k
    {
39
24.5k
      if (buffer->count != (ssize_t) sizeof(buffer->data)-1)
40
24.5k
        return(EOF);
41
0
      buffer->offset=0;
42
0
      buffer->count=0;
43
0
    }
44
12.6M
  if ((buffer->offset == 0) && (buffer->count == 0))
45
20.0k
    {
46
20.0k
      buffer->count=ReadBlob(buffer->image,sizeof(buffer->data)-1,
47
20.0k
        buffer->data);
48
20.0k
      if (buffer->count < 1)
49
538
        return(EOF);
50
20.0k
    }
51
12.6M
  return((int) buffer->data[buffer->offset]);
52
12.6M
}
pdf.c:PeekMagickByteBuffer
Line
Count
Source
36
3.39M
{
37
3.39M
  if ((buffer->offset == buffer->count) && (buffer->offset > 0))
38
5.38k
    {
39
5.38k
      if (buffer->count != (ssize_t) sizeof(buffer->data)-1)
40
5.38k
        return(EOF);
41
0
      buffer->offset=0;
42
0
      buffer->count=0;
43
0
    }
44
3.38M
  if ((buffer->offset == 0) && (buffer->count == 0))
45
5.15k
    {
46
5.15k
      buffer->count=ReadBlob(buffer->image,sizeof(buffer->data)-1,
47
5.15k
        buffer->data);
48
5.15k
      if (buffer->count < 1)
49
193
        return(EOF);
50
5.15k
    }
51
3.38M
  return((int) buffer->data[buffer->offset]);
52
3.38M
}
ps.c:PeekMagickByteBuffer
Line
Count
Source
36
9.26M
{
37
9.26M
  if ((buffer->offset == buffer->count) && (buffer->offset > 0))
38
19.1k
    {
39
19.1k
      if (buffer->count != (ssize_t) sizeof(buffer->data)-1)
40
19.1k
        return(EOF);
41
0
      buffer->offset=0;
42
0
      buffer->count=0;
43
0
    }
44
9.25M
  if ((buffer->offset == 0) && (buffer->count == 0))
45
14.9k
    {
46
14.9k
      buffer->count=ReadBlob(buffer->image,sizeof(buffer->data)-1,
47
14.9k
        buffer->data);
48
14.9k
      if (buffer->count < 1)
49
345
        return(EOF);
50
14.9k
    }
51
9.24M
  return((int) buffer->data[buffer->offset]);
52
9.25M
}
Unexecuted instantiation: xps.c:PeekMagickByteBuffer
53
54
static inline int ReadMagickByteBuffer(MagickByteBuffer *buffer)
55
11.1M
{
56
11.1M
  int
57
11.1M
    result;
58
59
11.1M
  result=PeekMagickByteBuffer(buffer);
60
11.1M
  if (result != EOF)
61
11.1M
    buffer->offset++;
62
11.1M
  return(result);
63
11.1M
}
pdf.c:ReadMagickByteBuffer
Line
Count
Source
55
3.39M
{
56
3.39M
  int
57
3.39M
    result;
58
59
3.39M
  result=PeekMagickByteBuffer(buffer);
60
3.39M
  if (result != EOF)
61
3.38M
    buffer->offset++;
62
3.39M
  return(result);
63
3.39M
}
ps.c:ReadMagickByteBuffer
Line
Count
Source
55
7.78M
{
56
7.78M
  int
57
7.78M
    result;
58
59
7.78M
  result=PeekMagickByteBuffer(buffer);
60
7.78M
  if (result != EOF)
61
7.76M
    buffer->offset++;
62
7.78M
  return(result);
63
7.78M
}
Unexecuted instantiation: xps.c:ReadMagickByteBuffer
64
65
static inline char *GetMagickByteBufferDatum(MagickByteBuffer *buffer)
66
46.2k
{
67
46.2k
  ssize_t
68
46.2k
    count,
69
46.2k
    i;
70
71
46.2k
  if (buffer->offset != 0)
72
46.2k
    {
73
46.2k
      i=0;
74
55.1M
      while (buffer->offset < buffer->count)
75
55.1M
        buffer->data[i++]=buffer->data[buffer->offset++];
76
46.2k
      count=ReadBlob(buffer->image,(size_t) ((ssize_t) sizeof(buffer->data)-1-
77
46.2k
        i),buffer->data+i);
78
46.2k
      buffer->count=i;
79
46.2k
      if (count > 0)
80
0
        buffer->count+=count;
81
46.2k
      buffer->offset=0;
82
46.2k
    }
83
46.2k
  return((char *) buffer->data);
84
46.2k
}
pdf.c:GetMagickByteBufferDatum
Line
Count
Source
66
11.4k
{
67
11.4k
  ssize_t
68
11.4k
    count,
69
11.4k
    i;
70
71
11.4k
  if (buffer->offset != 0)
72
11.4k
    {
73
11.4k
      i=0;
74
13.7M
      while (buffer->offset < buffer->count)
75
13.7M
        buffer->data[i++]=buffer->data[buffer->offset++];
76
11.4k
      count=ReadBlob(buffer->image,(size_t) ((ssize_t) sizeof(buffer->data)-1-
77
11.4k
        i),buffer->data+i);
78
11.4k
      buffer->count=i;
79
11.4k
      if (count > 0)
80
0
        buffer->count+=count;
81
11.4k
      buffer->offset=0;
82
11.4k
    }
83
11.4k
  return((char *) buffer->data);
84
11.4k
}
ps.c:GetMagickByteBufferDatum
Line
Count
Source
66
34.8k
{
67
34.8k
  ssize_t
68
34.8k
    count,
69
34.8k
    i;
70
71
34.8k
  if (buffer->offset != 0)
72
34.7k
    {
73
34.7k
      i=0;
74
41.4M
      while (buffer->offset < buffer->count)
75
41.4M
        buffer->data[i++]=buffer->data[buffer->offset++];
76
34.7k
      count=ReadBlob(buffer->image,(size_t) ((ssize_t) sizeof(buffer->data)-1-
77
34.7k
        i),buffer->data+i);
78
34.7k
      buffer->count=i;
79
34.7k
      if (count > 0)
80
0
        buffer->count+=count;
81
34.7k
      buffer->offset=0;
82
34.7k
    }
83
34.8k
  return((char *) buffer->data);
84
34.8k
}
Unexecuted instantiation: xps.c:GetMagickByteBufferDatum
85
86
static inline void CheckMagickByteBuffer(MagickByteBuffer *buffer,
87
  const size_t length)
88
9.10M
{
89
9.10M
  if ((buffer->offset+(ssize_t) length) > (ssize_t) sizeof(buffer->data))
90
0
    (void) GetMagickByteBufferDatum(buffer);
91
9.10M
}
pdf.c:CheckMagickByteBuffer
Line
Count
Source
88
2.46M
{
89
2.46M
  if ((buffer->offset+(ssize_t) length) > (ssize_t) sizeof(buffer->data))
90
0
    (void) GetMagickByteBufferDatum(buffer);
91
2.46M
}
ps.c:CheckMagickByteBuffer
Line
Count
Source
88
6.64M
{
89
6.64M
  if ((buffer->offset+(ssize_t) length) > (ssize_t) sizeof(buffer->data))
90
0
    (void) GetMagickByteBufferDatum(buffer);
91
6.64M
}
Unexecuted instantiation: xps.c:CheckMagickByteBuffer
92
93
static inline MagickBooleanType CompareMagickByteBuffer(MagickByteBuffer *buffer,
94
  const char *p,const size_t length)
95
8.56M
{
96
8.56M
  const char
97
8.56M
    *q;
98
99
8.56M
  CheckMagickByteBuffer(buffer,length);
100
8.56M
  q=(const char *) buffer->data+buffer->offset;
101
8.56M
  if (LocaleNCompare(p,q,length) != 0)
102
7.88M
    return(MagickFalse);
103
674k
  return(MagickTrue);
104
8.56M
}
pdf.c:CompareMagickByteBuffer
Line
Count
Source
95
2.31M
{
96
2.31M
  const char
97
2.31M
    *q;
98
99
2.31M
  CheckMagickByteBuffer(buffer,length);
100
2.31M
  q=(const char *) buffer->data+buffer->offset;
101
2.31M
  if (LocaleNCompare(p,q,length) != 0)
102
2.10M
    return(MagickFalse);
103
208k
  return(MagickTrue);
104
2.31M
}
ps.c:CompareMagickByteBuffer
Line
Count
Source
95
6.25M
{
96
6.25M
  const char
97
6.25M
    *q;
98
99
6.25M
  CheckMagickByteBuffer(buffer,length);
100
6.25M
  q=(const char *) buffer->data+buffer->offset;
101
6.25M
  if (LocaleNCompare(p,q,length) != 0)
102
5.78M
    return(MagickFalse);
103
466k
  return(MagickTrue);
104
6.25M
}
Unexecuted instantiation: xps.c:CompareMagickByteBuffer
105
106
static inline void SkipMagickByteBuffer(MagickByteBuffer *buffer,
107
  const size_t length)
108
545k
{
109
545k
  CheckMagickByteBuffer(buffer,length);
110
545k
  if ((buffer->offset+(ssize_t) length) < buffer->count)
111
543k
    buffer->offset+=(ssize_t) length;
112
545k
}
pdf.c:SkipMagickByteBuffer
Line
Count
Source
108
159k
{
109
159k
  CheckMagickByteBuffer(buffer,length);
110
159k
  if ((buffer->offset+(ssize_t) length) < buffer->count)
111
158k
    buffer->offset+=(ssize_t) length;
112
159k
}
ps.c:SkipMagickByteBuffer
Line
Count
Source
108
386k
{
109
386k
  CheckMagickByteBuffer(buffer,length);
110
386k
  if ((buffer->offset+(ssize_t) length) < buffer->count)
111
384k
    buffer->offset+=(ssize_t) length;
112
386k
}
Unexecuted instantiation: xps.c:SkipMagickByteBuffer
113
114
static inline MagickBooleanType SkipMagickByteBufferUntilNewline(
115
  MagickByteBuffer *buffer)
116
2.14k
{
117
2.14k
  int
118
2.14k
    c;
119
120
2.14k
  c=ReadMagickByteBuffer(buffer);
121
165k
  while ((c != '\n') && (c != '\r'))
122
163k
  {
123
163k
    c=ReadMagickByteBuffer(buffer);
124
163k
    if (c == EOF)
125
287
      return(MagickFalse);
126
163k
  }
127
1.85k
  return(MagickTrue);
128
2.14k
}
Unexecuted instantiation: pdf.c:SkipMagickByteBufferUntilNewline
ps.c:SkipMagickByteBufferUntilNewline
Line
Count
Source
116
2.14k
{
117
2.14k
  int
118
2.14k
    c;
119
120
2.14k
  c=ReadMagickByteBuffer(buffer);
121
165k
  while ((c != '\n') && (c != '\r'))
122
163k
  {
123
163k
    c=ReadMagickByteBuffer(buffer);
124
163k
    if (c == EOF)
125
287
      return(MagickFalse);
126
163k
  }
127
1.85k
  return(MagickTrue);
128
2.14k
}
Unexecuted instantiation: xps.c:SkipMagickByteBufferUntilNewline
129
130
#endif