Skip to content

Commit c136596

Browse files
committed
Fix pointer bounds in CoreGraphics
1 parent 65f96ab commit c136596

File tree

2 files changed

+222
-1
lines changed

2 files changed

+222
-1
lines changed

framework-crates/objc2-core-graphics/translation-config.toml

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,227 @@ fn.CGColorSpaceCopyBaseColorSpace.renamed = "copy_base_color_space"
7373
fn.__CGBitmapContextCreateWithData.skipped = true
7474
fn.__CGBitmapContextCreate.skipped = true
7575

76+
##
77+
## Fix bounds information.
78+
##
79+
80+
fn.CGColorCreate.arguments.1.bounds.counted-by = "space.number_of_components() + 1"
81+
fn.CGColorCreateWithPattern.arguments.2.bounds.counted-by = "space.number_of_components() + 1"
82+
fn.CGColorGetComponents.return.bounds.counted-by = "self.number_of_components()" # Or "self.color_space().number_of_components() + 1"
83+
84+
fn.CGColorSpaceCreateCalibratedGray.arguments.0.written = false
85+
fn.CGColorSpaceCreateCalibratedGray.arguments.1.written = false
86+
fn.CGColorSpaceCreateCalibratedRGB.arguments.0.written = false
87+
fn.CGColorSpaceCreateCalibratedRGB.arguments.1.written = false
88+
fn.CGColorSpaceCreateCalibratedRGB.arguments.2.written = false
89+
fn.CGColorSpaceCreateCalibratedRGB.arguments.3.written = false
90+
fn.CGColorSpaceCreateLab.arguments.0.written = false
91+
fn.CGColorSpaceCreateLab.arguments.1.written = false
92+
fn.CGColorSpaceCreateLab.arguments.2.written = false
93+
fn.CGColorSpaceGetColorTable.arguments.1.written = false
94+
95+
fn.CGContextSetLineDash.arguments.2.bounds.counted-by = "count"
96+
fn.CGContextAddRects.arguments.1.bounds.counted-by = "count"
97+
fn.CGContextAddLines.arguments.1.bounds.counted-by = "count"
98+
fn.CGContextFillRects.arguments.1.bounds.counted-by = "count"
99+
fn.CGContextStrokeLineSegments.arguments.1.bounds.counted-by = "count"
100+
fn.CGContextClipToRects.arguments.1.bounds.counted-by = "count"
101+
fn.CGContextSetFillColor.arguments.1.bounds = "unsafe" # Num. components in color space
102+
fn.CGContextSetStrokeColor.arguments.1.bounds = "unsafe" # Num. components in color space
103+
fn.CGContextSetFillPattern.arguments.2.bounds = "unsafe" # Num. components in (pattern?) color space
104+
fn.CGContextSetStrokePattern.arguments.2.bounds = "unsafe" # Num. components in (pattern?) color space
105+
fn.CGContextShowGlyphsAtPositions.arguments.1.bounds.counted-by = "count"
106+
fn.CGContextShowGlyphsAtPositions.arguments.2.bounds.counted-by = "count"
107+
fn.CGContextBeginPage.arguments.1.bounds = "single"
108+
fn.CGContextSelectFont.arguments.1.bounds = "null-terminated"
109+
fn.CGContextShowText.arguments.1.bounds = "null-terminated"
110+
fn.CGContextShowTextAtPoint.arguments.3.bounds = "null-terminated"
111+
fn.CGContextShowGlyphs.arguments.1.bounds.counted-by = "count"
112+
fn.CGContextShowGlyphsAtPoint.arguments.3.bounds.counted-by = "count"
113+
fn.CGContextShowGlyphsWithAdvances.arguments.1.bounds.counted-by = "count"
114+
fn.CGContextShowGlyphsWithAdvances.arguments.2.bounds.counted-by = "count"
115+
116+
fn.CGDataConsumerCreate.arguments.1.bounds = "single"
117+
118+
fn.CGDataProviderCreateSequential.arguments.1.bounds = "single"
119+
fn.CGDataProviderCreateDirect.arguments.2.bounds = "single"
120+
fn.CGDataProviderCreateWithFilename.arguments.0.bounds = "null-terminated"
121+
122+
fn.CGGetDisplaysWithPoint.arguments.2.bounds.counted-by = "max_displays"
123+
fn.CGGetDisplaysWithPoint.arguments.3.bounds = "single"
124+
fn.CGGetDisplaysWithRect.arguments.2.bounds.counted-by = "max_displays"
125+
fn.CGGetDisplaysWithRect.arguments.3.bounds = "single"
126+
fn.CGGetDisplaysWithOpenGLDisplayMask.arguments.2.bounds.counted-by = "max_displays"
127+
fn.CGGetDisplaysWithOpenGLDisplayMask.arguments.3.bounds = "single"
128+
fn.CGGetActiveDisplayList.arguments.1.bounds.counted-by = "max_displays"
129+
fn.CGGetActiveDisplayList.arguments.2.bounds = "single"
130+
fn.CGGetOnlineDisplayList.arguments.1.bounds.counted-by = "max_displays"
131+
fn.CGGetOnlineDisplayList.arguments.2.bounds = "single"
132+
fn.CGGetDisplayTransferByFormula.arguments.1.bounds = "single"
133+
fn.CGGetDisplayTransferByFormula.arguments.2.bounds = "single"
134+
fn.CGGetDisplayTransferByFormula.arguments.3.bounds = "single"
135+
fn.CGGetDisplayTransferByFormula.arguments.4.bounds = "single"
136+
fn.CGGetDisplayTransferByFormula.arguments.5.bounds = "single"
137+
fn.CGGetDisplayTransferByFormula.arguments.6.bounds = "single"
138+
fn.CGGetDisplayTransferByFormula.arguments.7.bounds = "single"
139+
fn.CGGetDisplayTransferByFormula.arguments.8.bounds = "single"
140+
fn.CGGetDisplayTransferByFormula.arguments.9.bounds = "single"
141+
fn.CGSetDisplayTransferByTable.arguments.2.bounds.counted-by = "table_size"
142+
fn.CGSetDisplayTransferByTable.arguments.3.bounds.counted-by = "table_size"
143+
fn.CGSetDisplayTransferByTable.arguments.4.bounds.counted-by = "table_size"
144+
fn.CGGetDisplayTransferByTable.arguments.2.bounds.counted-by = "capacity"
145+
fn.CGGetDisplayTransferByTable.arguments.3.bounds.counted-by = "capacity"
146+
fn.CGGetDisplayTransferByTable.arguments.4.bounds.counted-by = "capacity"
147+
fn.CGGetDisplayTransferByTable.arguments.5.bounds = "single"
148+
fn.CGSetDisplayTransferByByteTable.arguments.2.bounds.counted-by = "table_size"
149+
fn.CGSetDisplayTransferByByteTable.arguments.3.bounds.counted-by = "table_size"
150+
fn.CGSetDisplayTransferByByteTable.arguments.4.bounds.counted-by = "table_size"
151+
fn.CGGetLastMouseDelta.arguments.0.bounds = "single"
152+
fn.CGGetLastMouseDelta.arguments.1.bounds = "single"
153+
fn.CGDisplayBestModeForParameters.arguments.4.bounds = "single"
154+
fn.CGDisplayBestModeForParametersAndRefreshRate.arguments.5.bounds = "single"
155+
156+
fn.CGBeginDisplayConfiguration.arguments.0.bounds = "single"
157+
158+
fn.CGAcquireDisplayFadeReservation.arguments.1.bounds = "single"
159+
160+
fn.CGDisplayStreamUpdateGetRects.arguments.2.bounds = "single"
161+
fn.CGDisplayStreamUpdateGetRects.return.bounds.counted-by = "rect_count"
162+
fn.CGDisplayStreamUpdateGetMovedRectsDelta.arguments.1.bounds = "single"
163+
fn.CGDisplayStreamUpdateGetMovedRectsDelta.arguments.2.bounds = "single"
164+
165+
fn.CGEventKeyboardGetUnicodeString.arguments.2.bounds = "single"
166+
fn.CGEventKeyboardGetUnicodeString.arguments.3.bounds.counted-by = "max_string_length"
167+
fn.CGEventKeyboardSetUnicodeString.arguments.2.bounds.counted-by = "string_length"
168+
fn.CGGetEventTapList.arguments.1.bounds.counted-by = "max_number_of_taps"
169+
fn.CGGetEventTapList.arguments.2.bounds = "single"
170+
171+
fn.CGFontGetGlyphAdvances.arguments.1.bounds.counted-by = "count"
172+
fn.CGFontGetGlyphAdvances.arguments.3.bounds = "single"
173+
fn.CGFontGetGlyphBBoxes.arguments.1.bounds.counted-by = "count"
174+
fn.CGFontGetGlyphBBoxes.arguments.3.bounds = "single"
175+
fn.CGFontCreatePostScriptSubset.arguments.3.bounds.counted-by = "count"
176+
fn.CGFontCreatePostScriptSubset.arguments.5.written = false
177+
fn.CGFontCreatePostScriptEncoding.arguments.1.written = false
178+
179+
fn.CGFunctionCreate.arguments.2.bounds.counted-by = "domain_dimension * 2"
180+
fn.CGFunctionCreate.arguments.4.bounds.counted-by = "range_dimension * 2"
181+
fn.CGFunctionCreate.arguments.5.bounds = "single"
182+
183+
fn.CGRectDivide.arguments.1.bounds = "single"
184+
fn.CGRectDivide.arguments.2.bounds = "single"
185+
fn.CGPointMakeWithDictionaryRepresentation.arguments.1.bounds = "single"
186+
fn.CGSizeMakeWithDictionaryRepresentation.arguments.1.bounds = "single"
187+
fn.CGRectMakeWithDictionaryRepresentation.arguments.1.bounds = "single"
188+
189+
fn.CGGradientCreateWithColorComponents.arguments.1.bounds.counted-by = "space.number_of_components() * count"
190+
fn.CGGradientCreateWithColorComponents.arguments.2.bounds.counted-by = "count"
191+
fn.CGGradientCreateWithContentHeadroom.arguments.2.bounds.counted-by = "space.number_of_components() * count"
192+
fn.CGGradientCreateWithContentHeadroom.arguments.3.bounds.counted-by = "count"
193+
fn.CGGradientCreateWithColors.arguments.2.bounds.counted-by = "colors.count()"
194+
195+
# The `decode` array depends on a lot of things, so mark it `unsafe` for now.
196+
fn.CGImageCreate.arguments.8.bounds = "unsafe"
197+
fn.CGImageMaskCreate.arguments.6.bounds = "unsafe"
198+
fn.CGImageCreateWithJPEGDataProvider.arguments.1.bounds = "unsafe"
199+
fn.CGImageCreateWithPNGDataProvider.arguments.1.bounds = "unsafe"
200+
fn.CGImageCreateWithMaskingColors.arguments.1.bounds.counted-by = "self.color_space().number_of_components() * 2"
201+
fn.CGImageCreateWithContentHeadroom.arguments.9.bounds = "unsafe"
202+
fn.CGImageGetDecode.return.bounds = "unsafe"
203+
204+
fn.CGPathCreateCopyByTransformingPath.arguments.1.bounds = "single"
205+
fn.CGPathCreateMutableCopyByTransformingPath.arguments.1.bounds = "single"
206+
fn.CGPathCreateWithRect.arguments.1.bounds = "single"
207+
fn.CGPathCreateWithEllipseInRect.arguments.1.bounds = "single"
208+
fn.CGPathCreateWithRoundedRect.arguments.3.bounds = "single"
209+
fn.CGPathAddRoundedRect.arguments.1.bounds = "single"
210+
fn.CGPathCreateCopyByDashingPath.arguments.1.bounds = "single"
211+
fn.CGPathCreateCopyByDashingPath.arguments.3.bounds.counted-by = "count"
212+
fn.CGPathCreateCopyByStrokingPath.arguments.1.bounds = "single"
213+
fn.CGPathMoveToPoint.arguments.1.bounds = "single"
214+
fn.CGPathAddLineToPoint.arguments.1.bounds = "single"
215+
fn.CGPathAddQuadCurveToPoint.arguments.1.bounds = "single"
216+
fn.CGPathAddCurveToPoint.arguments.1.bounds = "single"
217+
fn.CGPathAddRect.arguments.1.bounds = "single"
218+
fn.CGPathAddRects.arguments.1.bounds = "single"
219+
fn.CGPathAddRects.arguments.2.bounds.counted-by = "count"
220+
fn.CGPathAddLines.arguments.1.bounds = "single"
221+
fn.CGPathAddLines.arguments.2.bounds.counted-by = "count"
222+
fn.CGPathAddEllipseInRect.arguments.1.bounds = "single"
223+
fn.CGPathAddRelativeArc.arguments.1.bounds = "single"
224+
fn.CGPathAddArc.arguments.1.bounds = "single"
225+
fn.CGPathAddArcToPoint.arguments.1.bounds = "single"
226+
fn.CGPathAddPath.arguments.1.bounds = "single"
227+
fn.CGPathIsRect.arguments.1.bounds = "single"
228+
fn.CGPathContainsPoint.arguments.1.bounds = "single"
229+
230+
fn.CGPatternCreate.arguments.7.bounds = "single"
231+
232+
fn.CGPDFArrayGetObject.arguments.2.bounds = "single"
233+
fn.CGPDFArrayGetBoolean.arguments.2.bounds = "single"
234+
fn.CGPDFArrayGetInteger.arguments.2.bounds = "single"
235+
fn.CGPDFArrayGetNumber.arguments.2.bounds = "single"
236+
fn.CGPDFArrayGetName.arguments.2.bounds = "single"
237+
fn.CGPDFArrayGetString.arguments.2.bounds = "single"
238+
fn.CGPDFArrayGetArray.arguments.2.bounds = "single"
239+
fn.CGPDFArrayGetDictionary.arguments.2.bounds = "single"
240+
fn.CGPDFArrayGetStream.arguments.2.bounds = "single"
241+
242+
fn.CGPDFContentStreamGetResource.arguments.1.bounds = "null-terminated"
243+
fn.CGPDFContentStreamGetResource.arguments.2.bounds = "null-terminated"
244+
245+
fn.CGPDFContextCreate.arguments.1.bounds = "single"
246+
fn.CGPDFContextCreateWithURL.arguments.1.bounds = "single"
247+
# fn.CGPDFTagTypeGetName.return.bounds = "null-terminated" # TODO: static lifetime
248+
249+
fn.CGPDFDictionaryGetObject.arguments.1.bounds = "null-terminated"
250+
fn.CGPDFDictionaryGetObject.arguments.2.bounds = "single"
251+
fn.CGPDFDictionaryGetBoolean.arguments.1.bounds = "null-terminated"
252+
fn.CGPDFDictionaryGetBoolean.arguments.2.bounds = "single"
253+
fn.CGPDFDictionaryGetInteger.arguments.1.bounds = "null-terminated"
254+
fn.CGPDFDictionaryGetInteger.arguments.2.bounds = "single"
255+
fn.CGPDFDictionaryGetNumber.arguments.1.bounds = "null-terminated"
256+
fn.CGPDFDictionaryGetNumber.arguments.2.bounds = "single"
257+
fn.CGPDFDictionaryGetName.arguments.1.bounds = "null-terminated"
258+
fn.CGPDFDictionaryGetName.arguments.2.bounds = "single"
259+
fn.CGPDFDictionaryGetString.arguments.1.bounds = "null-terminated"
260+
fn.CGPDFDictionaryGetString.arguments.2.bounds = "single"
261+
fn.CGPDFDictionaryGetArray.arguments.1.bounds = "null-terminated"
262+
fn.CGPDFDictionaryGetArray.arguments.2.bounds = "single"
263+
fn.CGPDFDictionaryGetDictionary.arguments.1.bounds = "null-terminated"
264+
fn.CGPDFDictionaryGetDictionary.arguments.2.bounds = "single"
265+
fn.CGPDFDictionaryGetStream.arguments.1.bounds = "null-terminated"
266+
fn.CGPDFDictionaryGetStream.arguments.2.bounds = "single"
267+
268+
fn.CGPDFDocumentGetVersion.arguments.1.bounds = "single"
269+
fn.CGPDFDocumentGetVersion.arguments.2.bounds = "single"
270+
fn.CGPDFDocumentUnlockWithPassword.arguments.1.bounds = "null-terminated"
271+
272+
fn.CGPDFOperatorTableSetCallback.arguments.1.bounds = "null-terminated"
273+
274+
fn.CGPDFScannerPopObject.arguments.1.bounds = "single"
275+
fn.CGPDFScannerPopBoolean.arguments.1.bounds = "single"
276+
fn.CGPDFScannerPopInteger.arguments.1.bounds = "single"
277+
fn.CGPDFScannerPopNumber.arguments.1.bounds = "single"
278+
fn.CGPDFScannerPopName.arguments.1.bounds = "single"
279+
fn.CGPDFScannerPopString.arguments.1.bounds = "single"
280+
fn.CGPDFScannerPopArray.arguments.1.bounds = "single"
281+
fn.CGPDFScannerPopDictionary.arguments.1.bounds = "single"
282+
fn.CGPDFScannerPopStream.arguments.1.bounds = "single"
283+
284+
fn.CGPDFStreamCopyData.arguments.1.bounds = "single"
285+
fn.CGPDFStringGetBytePtr.return.bounds.counted-by = "string.length()"
286+
287+
fn.CGPSConverterCreate.arguments.1.bounds = "single"
288+
289+
fn.CGWaitForScreenRefreshRects.arguments.0.bounds = "single" # Though inner is counted by `count`
290+
fn.CGWaitForScreenRefreshRects.arguments.1.bounds = "single"
291+
fn.CGWaitForScreenUpdateRects.arguments.1.bounds = "single"
292+
fn.CGWaitForScreenUpdateRects.arguments.2.bounds = "single" # Though inner is counted by `rect_count`
293+
fn.CGWaitForScreenUpdateRects.arguments.3.bounds = "single"
294+
fn.CGWaitForScreenUpdateRects.arguments.4.bounds = "single"
295+
fn.CGReleaseScreenRefreshRects.arguments.0.bounds = "unsafe"
296+
76297
##
77298
## Fixing generics.
78299
##

0 commit comments

Comments
 (0)