Coverage Report

Created: 2026-03-31 06:56

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
48.4M
{
37
48.4M
  if ((buffer->offset == buffer->count) && (buffer->offset > 0))
38
29.7k
    {
39
29.7k
      if (buffer->count != (ssize_t) sizeof(buffer->data)-1)
40
28.8k
        return(EOF);
41
881
      buffer->offset=0;
42
881
      buffer->count=0;
43
881
    }
44
48.4M
  if ((buffer->offset == 0) && (buffer->count == 0))
45
28.0k
    {
46
28.0k
      buffer->count=ReadBlob(buffer->image,sizeof(buffer->data)-1,
47
28.0k
        buffer->data);
48
28.0k
      if (buffer->count < 1)
49
3.54k
        return(EOF);
50
28.0k
    }
51
48.4M
  return((int) buffer->data[buffer->offset]);
52
48.4M
}
pdf.c:PeekMagickByteBuffer
Line
Count
Source
36
3.26M
{
37
3.26M
  if ((buffer->offset == buffer->count) && (buffer->offset > 0))
38
4.44k
    {
39
4.44k
      if (buffer->count != (ssize_t) sizeof(buffer->data)-1)
40
4.44k
        return(EOF);
41
0
      buffer->offset=0;
42
0
      buffer->count=0;
43
0
    }
44
3.26M
  if ((buffer->offset == 0) && (buffer->count == 0))
45
7.05k
    {
46
7.05k
      buffer->count=ReadBlob(buffer->image,sizeof(buffer->data)-1,
47
7.05k
        buffer->data);
48
7.05k
      if (buffer->count < 1)
49
2.97k
        return(EOF);
50
7.05k
    }
51
3.26M
  return((int) buffer->data[buffer->offset]);
52
3.26M
}
ps.c:PeekMagickByteBuffer
Line
Count
Source
36
45.1M
{
37
45.1M
  if ((buffer->offset == buffer->count) && (buffer->offset > 0))
38
25.2k
    {
39
25.2k
      if (buffer->count != (ssize_t) sizeof(buffer->data)-1)
40
24.4k
        return(EOF);
41
881
      buffer->offset=0;
42
881
      buffer->count=0;
43
881
    }
44
45.1M
  if ((buffer->offset == 0) && (buffer->count == 0))
45
21.0k
    {
46
21.0k
      buffer->count=ReadBlob(buffer->image,sizeof(buffer->data)-1,
47
21.0k
        buffer->data);
48
21.0k
      if (buffer->count < 1)
49
562
        return(EOF);
50
21.0k
    }
51
45.1M
  return((int) buffer->data[buffer->offset]);
52
45.1M
}
Unexecuted instantiation: xps.c:PeekMagickByteBuffer
53
54
static inline int ReadMagickByteBuffer(MagickByteBuffer *buffer)
55
44.1M
{
56
44.1M
  int
57
44.1M
    result;
58
59
44.1M
  result=PeekMagickByteBuffer(buffer);
60
44.1M
  if (result != EOF)
61
44.1M
    buffer->offset++;
62
44.1M
  return(result);
63
44.1M
}
pdf.c:ReadMagickByteBuffer
Line
Count
Source
55
3.26M
{
56
3.26M
  int
57
3.26M
    result;
58
59
3.26M
  result=PeekMagickByteBuffer(buffer);
60
3.26M
  if (result != EOF)
61
3.26M
    buffer->offset++;
62
3.26M
  return(result);
63
3.26M
}
ps.c:ReadMagickByteBuffer
Line
Count
Source
55
40.9M
{
56
40.9M
  int
57
40.9M
    result;
58
59
40.9M
  result=PeekMagickByteBuffer(buffer);
60
40.9M
  if (result != EOF)
61
40.8M
    buffer->offset++;
62
40.9M
  return(result);
63
40.9M
}
Unexecuted instantiation: xps.c:ReadMagickByteBuffer
64
65
static inline char *GetMagickByteBufferDatum(MagickByteBuffer *buffer)
66
51.3k
{
67
51.3k
  ssize_t
68
51.3k
    count,
69
51.3k
    i;
70
71
51.3k
  if (buffer->offset != 0)
72
51.2k
    {
73
51.2k
      i=0;
74
77.1M
      while (buffer->offset < buffer->count)
75
77.1M
        buffer->data[i++]=buffer->data[buffer->offset++];
76
51.2k
      count=ReadBlob(buffer->image,(size_t) ((ssize_t) sizeof(buffer->data)-1-
77
51.2k
        i),buffer->data+i);
78
51.2k
      buffer->count=i;
79
51.2k
      if (count > 0)
80
544
        buffer->count+=count;
81
51.2k
      buffer->offset=0;
82
51.2k
    }
83
51.3k
  return((char *) buffer->data);
84
51.3k
}
pdf.c:GetMagickByteBufferDatum
Line
Count
Source
66
11.5k
{
67
11.5k
  ssize_t
68
11.5k
    count,
69
11.5k
    i;
70
71
11.5k
  if (buffer->offset != 0)
72
11.5k
    {
73
11.5k
      i=0;
74
17.5M
      while (buffer->offset < buffer->count)
75
17.5M
        buffer->data[i++]=buffer->data[buffer->offset++];
76
11.5k
      count=ReadBlob(buffer->image,(size_t) ((ssize_t) sizeof(buffer->data)-1-
77
11.5k
        i),buffer->data+i);
78
11.5k
      buffer->count=i;
79
11.5k
      if (count > 0)
80
0
        buffer->count+=count;
81
11.5k
      buffer->offset=0;
82
11.5k
    }
83
11.5k
  return((char *) buffer->data);
84
11.5k
}
ps.c:GetMagickByteBufferDatum
Line
Count
Source
66
39.8k
{
67
39.8k
  ssize_t
68
39.8k
    count,
69
39.8k
    i;
70
71
39.8k
  if (buffer->offset != 0)
72
39.7k
    {
73
39.7k
      i=0;
74
59.5M
      while (buffer->offset < buffer->count)
75
59.5M
        buffer->data[i++]=buffer->data[buffer->offset++];
76
39.7k
      count=ReadBlob(buffer->image,(size_t) ((ssize_t) sizeof(buffer->data)-1-
77
39.7k
        i),buffer->data+i);
78
39.7k
      buffer->count=i;
79
39.7k
      if (count > 0)
80
544
        buffer->count+=count;
81
39.7k
      buffer->offset=0;
82
39.7k
    }
83
39.8k
  return((char *) buffer->data);
84
39.8k
}
Unexecuted instantiation: xps.c:GetMagickByteBufferDatum
85
86
static inline void CheckMagickByteBuffer(MagickByteBuffer *buffer,
87
  const size_t length)
88
7.60M
{
89
7.60M
  if ((buffer->offset+(ssize_t) length) > (ssize_t) sizeof(buffer->data))
90
292
    (void) GetMagickByteBufferDatum(buffer);
91
7.60M
}
pdf.c:CheckMagickByteBuffer
Line
Count
Source
88
1.80M
{
89
1.80M
  if ((buffer->offset+(ssize_t) length) > (ssize_t) sizeof(buffer->data))
90
0
    (void) GetMagickByteBufferDatum(buffer);
91
1.80M
}
ps.c:CheckMagickByteBuffer
Line
Count
Source
88
5.80M
{
89
5.80M
  if ((buffer->offset+(ssize_t) length) > (ssize_t) sizeof(buffer->data))
90
292
    (void) GetMagickByteBufferDatum(buffer);
91
5.80M
}
Unexecuted instantiation: xps.c:CheckMagickByteBuffer
92
93
static inline MagickBooleanType CompareMagickByteBuffer(MagickByteBuffer *buffer,
94
  const char *p,const size_t length)
95
7.34M
{
96
7.34M
  const char
97
7.34M
    *q;
98
99
7.34M
  CheckMagickByteBuffer(buffer,length);
100
7.34M
  q=(const char *) buffer->data+buffer->offset;
101
7.34M
  if (LocaleNCompare(p,q,length) != 0)
102
6.97M
    return(MagickFalse);
103
371k
  return(MagickTrue);
104
7.34M
}
pdf.c:CompareMagickByteBuffer
Line
Count
Source
95
1.71M
{
96
1.71M
  const char
97
1.71M
    *q;
98
99
1.71M
  CheckMagickByteBuffer(buffer,length);
100
1.71M
  q=(const char *) buffer->data+buffer->offset;
101
1.71M
  if (LocaleNCompare(p,q,length) != 0)
102
1.59M
    return(MagickFalse);
103
120k
  return(MagickTrue);
104
1.71M
}
ps.c:CompareMagickByteBuffer
Line
Count
Source
95
5.63M
{
96
5.63M
  const char
97
5.63M
    *q;
98
99
5.63M
  CheckMagickByteBuffer(buffer,length);
100
5.63M
  q=(const char *) buffer->data+buffer->offset;
101
5.63M
  if (LocaleNCompare(p,q,length) != 0)
102
5.37M
    return(MagickFalse);
103
251k
  return(MagickTrue);
104
5.63M
}
Unexecuted instantiation: xps.c:CompareMagickByteBuffer
105
106
static inline void SkipMagickByteBuffer(MagickByteBuffer *buffer,
107
  const size_t length)
108
262k
{
109
262k
  CheckMagickByteBuffer(buffer,length);
110
262k
  if ((buffer->offset+(ssize_t) length) < buffer->count)
111
261k
    buffer->offset+=(ssize_t) length;
112
262k
}
pdf.c:SkipMagickByteBuffer
Line
Count
Source
108
92.2k
{
109
92.2k
  CheckMagickByteBuffer(buffer,length);
110
92.2k
  if ((buffer->offset+(ssize_t) length) < buffer->count)
111
91.8k
    buffer->offset+=(ssize_t) length;
112
92.2k
}
ps.c:SkipMagickByteBuffer
Line
Count
Source
108
169k
{
109
169k
  CheckMagickByteBuffer(buffer,length);
110
169k
  if ((buffer->offset+(ssize_t) length) < buffer->count)
111
169k
    buffer->offset+=(ssize_t) length;
112
169k
}
Unexecuted instantiation: xps.c:SkipMagickByteBuffer
113
114
static inline MagickBooleanType SkipMagickByteBufferUntilNewline(
115
  MagickByteBuffer *buffer)
116
5.04k
{
117
5.04k
  int
118
5.04k
    c;
119
120
5.04k
  c=ReadMagickByteBuffer(buffer);
121
1.57M
  while ((c != '\n') && (c != '\r'))
122
1.56M
  {
123
1.56M
    c=ReadMagickByteBuffer(buffer);
124
1.56M
    if (c == EOF)
125
215
      return(MagickFalse);
126
1.56M
  }
127
4.82k
  return(MagickTrue);
128
5.04k
}
Unexecuted instantiation: pdf.c:SkipMagickByteBufferUntilNewline
ps.c:SkipMagickByteBufferUntilNewline
Line
Count
Source
116
5.04k
{
117
5.04k
  int
118
5.04k
    c;
119
120
5.04k
  c=ReadMagickByteBuffer(buffer);
121
1.57M
  while ((c != '\n') && (c != '\r'))
122
1.56M
  {
123
1.56M
    c=ReadMagickByteBuffer(buffer);
124
1.56M
    if (c == EOF)
125
215
      return(MagickFalse);
126
1.56M
  }
127
4.82k
  return(MagickTrue);
128
5.04k
}
Unexecuted instantiation: xps.c:SkipMagickByteBufferUntilNewline
129
130
#endif