Coverage Report

Created: 2026-06-07 07:20

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
50.9M
{
37
50.9M
  if ((buffer->offset == buffer->count) && (buffer->offset > 0))
38
35.9k
    {
39
35.9k
      if (buffer->count != (ssize_t) sizeof(buffer->data)-1)
40
35.0k
        return(EOF);
41
853
      buffer->offset=0;
42
853
      buffer->count=0;
43
853
    }
44
50.9M
  if ((buffer->offset == 0) && (buffer->count == 0))
45
30.3k
    {
46
30.3k
      buffer->count=ReadBlob(buffer->image,sizeof(buffer->data)-1,
47
30.3k
        buffer->data);
48
30.3k
      if (buffer->count < 1)
49
566
        return(EOF);
50
30.3k
    }
51
50.9M
  return((int) buffer->data[buffer->offset]);
52
50.9M
}
pdf.c:PeekMagickByteBuffer
Line
Count
Source
36
3.38M
{
37
3.38M
  if ((buffer->offset == buffer->count) && (buffer->offset > 0))
38
5.53k
    {
39
5.53k
      if (buffer->count != (ssize_t) sizeof(buffer->data)-1)
40
5.53k
        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.29k
    {
46
5.29k
      buffer->count=ReadBlob(buffer->image,sizeof(buffer->data)-1,
47
5.29k
        buffer->data);
48
5.29k
      if (buffer->count < 1)
49
198
        return(EOF);
50
5.29k
    }
51
3.38M
  return((int) buffer->data[buffer->offset]);
52
3.38M
}
ps.c:PeekMagickByteBuffer
Line
Count
Source
36
47.5M
{
37
47.5M
  if ((buffer->offset == buffer->count) && (buffer->offset > 0))
38
30.3k
    {
39
30.3k
      if (buffer->count != (ssize_t) sizeof(buffer->data)-1)
40
29.5k
        return(EOF);
41
853
      buffer->offset=0;
42
853
      buffer->count=0;
43
853
    }
44
47.5M
  if ((buffer->offset == 0) && (buffer->count == 0))
45
25.0k
    {
46
25.0k
      buffer->count=ReadBlob(buffer->image,sizeof(buffer->data)-1,
47
25.0k
        buffer->data);
48
25.0k
      if (buffer->count < 1)
49
368
        return(EOF);
50
25.0k
    }
51
47.5M
  return((int) buffer->data[buffer->offset]);
52
47.5M
}
Unexecuted instantiation: xps.c:PeekMagickByteBuffer
53
54
static inline int ReadMagickByteBuffer(MagickByteBuffer *buffer)
55
46.4M
{
56
46.4M
  int
57
46.4M
    result;
58
59
46.4M
  result=PeekMagickByteBuffer(buffer);
60
46.4M
  if (result != EOF)
61
46.4M
    buffer->offset++;
62
46.4M
  return(result);
63
46.4M
}
pdf.c:ReadMagickByteBuffer
Line
Count
Source
55
3.38M
{
56
3.38M
  int
57
3.38M
    result;
58
59
3.38M
  result=PeekMagickByteBuffer(buffer);
60
3.38M
  if (result != EOF)
61
3.38M
    buffer->offset++;
62
3.38M
  return(result);
63
3.38M
}
ps.c:ReadMagickByteBuffer
Line
Count
Source
55
43.0M
{
56
43.0M
  int
57
43.0M
    result;
58
59
43.0M
  result=PeekMagickByteBuffer(buffer);
60
43.0M
  if (result != EOF)
61
43.0M
    buffer->offset++;
62
43.0M
  return(result);
63
43.0M
}
Unexecuted instantiation: xps.c:ReadMagickByteBuffer
64
65
static inline char *GetMagickByteBufferDatum(MagickByteBuffer *buffer)
66
52.9k
{
67
52.9k
  ssize_t
68
52.9k
    count,
69
52.9k
    i;
70
71
52.9k
  if (buffer->offset != 0)
72
52.8k
    {
73
52.8k
      i=0;
74
61.9M
      while (buffer->offset < buffer->count)
75
61.8M
        buffer->data[i++]=buffer->data[buffer->offset++];
76
52.8k
      count=ReadBlob(buffer->image,(size_t) ((ssize_t) sizeof(buffer->data)-1-
77
52.8k
        i),buffer->data+i);
78
52.8k
      buffer->count=i;
79
52.8k
      if (count > 0)
80
541
        buffer->count+=count;
81
52.8k
      buffer->offset=0;
82
52.8k
    }
83
52.9k
  return((char *) buffer->data);
84
52.9k
}
pdf.c:GetMagickByteBufferDatum
Line
Count
Source
66
12.6k
{
67
12.6k
  ssize_t
68
12.6k
    count,
69
12.6k
    i;
70
71
12.6k
  if (buffer->offset != 0)
72
12.6k
    {
73
12.6k
      i=0;
74
15.2M
      while (buffer->offset < buffer->count)
75
15.2M
        buffer->data[i++]=buffer->data[buffer->offset++];
76
12.6k
      count=ReadBlob(buffer->image,(size_t) ((ssize_t) sizeof(buffer->data)-1-
77
12.6k
        i),buffer->data+i);
78
12.6k
      buffer->count=i;
79
12.6k
      if (count > 0)
80
0
        buffer->count+=count;
81
12.6k
      buffer->offset=0;
82
12.6k
    }
83
12.6k
  return((char *) buffer->data);
84
12.6k
}
ps.c:GetMagickByteBufferDatum
Line
Count
Source
66
40.2k
{
67
40.2k
  ssize_t
68
40.2k
    count,
69
40.2k
    i;
70
71
40.2k
  if (buffer->offset != 0)
72
40.2k
    {
73
40.2k
      i=0;
74
46.7M
      while (buffer->offset < buffer->count)
75
46.6M
        buffer->data[i++]=buffer->data[buffer->offset++];
76
40.2k
      count=ReadBlob(buffer->image,(size_t) ((ssize_t) sizeof(buffer->data)-1-
77
40.2k
        i),buffer->data+i);
78
40.2k
      buffer->count=i;
79
40.2k
      if (count > 0)
80
541
        buffer->count+=count;
81
40.2k
      buffer->offset=0;
82
40.2k
    }
83
40.2k
  return((char *) buffer->data);
84
40.2k
}
Unexecuted instantiation: xps.c:GetMagickByteBufferDatum
85
86
static inline void CheckMagickByteBuffer(MagickByteBuffer *buffer,
87
  const size_t length)
88
11.3M
{
89
11.3M
  if ((buffer->offset+(ssize_t) length) > (ssize_t) sizeof(buffer->data))
90
286
    (void) GetMagickByteBufferDatum(buffer);
91
11.3M
}
pdf.c:CheckMagickByteBuffer
Line
Count
Source
88
2.61M
{
89
2.61M
  if ((buffer->offset+(ssize_t) length) > (ssize_t) sizeof(buffer->data))
90
0
    (void) GetMagickByteBufferDatum(buffer);
91
2.61M
}
ps.c:CheckMagickByteBuffer
Line
Count
Source
88
8.68M
{
89
8.68M
  if ((buffer->offset+(ssize_t) length) > (ssize_t) sizeof(buffer->data))
90
286
    (void) GetMagickByteBufferDatum(buffer);
91
8.68M
}
Unexecuted instantiation: xps.c:CheckMagickByteBuffer
92
93
static inline MagickBooleanType CompareMagickByteBuffer(MagickByteBuffer *buffer,
94
  const char *p,const size_t length)
95
10.7M
{
96
10.7M
  const char
97
10.7M
    *q;
98
99
10.7M
  CheckMagickByteBuffer(buffer,length);
100
10.7M
  q=(const char *) buffer->data+buffer->offset;
101
10.7M
  if (LocaleNCompare(p,q,length) != 0)
102
9.98M
    return(MagickFalse);
103
739k
  return(MagickTrue);
104
10.7M
}
pdf.c:CompareMagickByteBuffer
Line
Count
Source
95
2.46M
{
96
2.46M
  const char
97
2.46M
    *q;
98
99
2.46M
  CheckMagickByteBuffer(buffer,length);
100
2.46M
  q=(const char *) buffer->data+buffer->offset;
101
2.46M
  if (LocaleNCompare(p,q,length) != 0)
102
2.25M
    return(MagickFalse);
103
209k
  return(MagickTrue);
104
2.46M
}
ps.c:CompareMagickByteBuffer
Line
Count
Source
95
8.26M
{
96
8.26M
  const char
97
8.26M
    *q;
98
99
8.26M
  CheckMagickByteBuffer(buffer,length);
100
8.26M
  q=(const char *) buffer->data+buffer->offset;
101
8.26M
  if (LocaleNCompare(p,q,length) != 0)
102
7.73M
    return(MagickFalse);
103
529k
  return(MagickTrue);
104
8.26M
}
Unexecuted instantiation: xps.c:CompareMagickByteBuffer
105
106
static inline void SkipMagickByteBuffer(MagickByteBuffer *buffer,
107
  const size_t length)
108
578k
{
109
578k
  CheckMagickByteBuffer(buffer,length);
110
578k
  if ((buffer->offset+(ssize_t) length) < buffer->count)
111
576k
    buffer->offset+=(ssize_t) length;
112
578k
}
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
419k
{
109
419k
  CheckMagickByteBuffer(buffer,length);
110
419k
  if ((buffer->offset+(ssize_t) length) < buffer->count)
111
418k
    buffer->offset+=(ssize_t) length;
112
419k
}
Unexecuted instantiation: xps.c:SkipMagickByteBuffer
113
114
static inline MagickBooleanType SkipMagickByteBufferUntilNewline(
115
  MagickByteBuffer *buffer)
116
5.47k
{
117
5.47k
  int
118
5.47k
    c;
119
120
5.47k
  c=ReadMagickByteBuffer(buffer);
121
1.58M
  while ((c != '\n') && (c != '\r'))
122
1.57M
  {
123
1.57M
    c=ReadMagickByteBuffer(buffer);
124
1.57M
    if (c == EOF)
125
313
      return(MagickFalse);
126
1.57M
  }
127
5.15k
  return(MagickTrue);
128
5.47k
}
Unexecuted instantiation: pdf.c:SkipMagickByteBufferUntilNewline
ps.c:SkipMagickByteBufferUntilNewline
Line
Count
Source
116
5.47k
{
117
5.47k
  int
118
5.47k
    c;
119
120
5.47k
  c=ReadMagickByteBuffer(buffer);
121
1.58M
  while ((c != '\n') && (c != '\r'))
122
1.57M
  {
123
1.57M
    c=ReadMagickByteBuffer(buffer);
124
1.57M
    if (c == EOF)
125
313
      return(MagickFalse);
126
1.57M
  }
127
5.15k
  return(MagickTrue);
128
5.47k
}
Unexecuted instantiation: xps.c:SkipMagickByteBufferUntilNewline
129
130
#endif