René's URL Explorer Experiment


Title: [Bug]: Overflow of 16-bit integer in Agg renderer causes PolyCollections to be drawn at incorrect locations · Issue #23826 · matplotlib/matplotlib · GitHub

Open Graph Title: [Bug]: Overflow of 16-bit integer in Agg renderer causes PolyCollections to be drawn at incorrect locations · Issue #23826 · matplotlib/matplotlib

X Title: [Bug]: Overflow of 16-bit integer in Agg renderer causes PolyCollections to be drawn at incorrect locations · Issue #23826 · matplotlib/matplotlib

Description: Bug summary Because the pixel x coordinates of scanline cells are casted from 32-bit integers to 16-bit ones in Agg (this line), some polygons that are outside the drawing area may actually be drawn at an incorrect location if they are f...

Open Graph Description: Bug summary Because the pixel x coordinates of scanline cells are casted from 32-bit integers to 16-bit ones in Agg (this line), some polygons that are outside the drawing area may actually be draw...

X Description: Bug summary Because the pixel x coordinates of scanline cells are casted from 32-bit integers to 16-bit ones in Agg (this line), some polygons that are outside the drawing area may actually be draw...

Opengraph URL: https://github.com/matplotlib/matplotlib/issues/23826

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"[Bug]: Overflow of 16-bit integer in Agg renderer causes PolyCollections to be drawn at incorrect locations","articleBody":"### Bug summary\n\nBecause the pixel x coordinates of scanline cells are casted from 32-bit integers to 16-bit ones in Agg ([this line](https://github.com/matplotlib/matplotlib/blob/3b79f63980c767fabc59ec5ba267818d8b4b5671/extern/agg24-svn/include/agg_scanline_p.h#L96)), some polygons that are outside the drawing area may actually be drawn at an incorrect location if they are far enough from the viewport so that the 16-bit integer used for actual drawing overflows and the value happens to be inside the drawing area.\n\n### Code for reproduction\n\n```python\nimport matplotlib.pyplot as plt\r\nimport matplotlib\r\nmatplotlib.use('TkAgg')\r\n\r\n# Create a 120x120 px figure\r\nfig = plt.figure(figsize=(120, 120), dpi=1)\r\n# Add axis that fills the whole figure\r\nax = fig.add_axes([0, 0, 1, 1])\r\nax.axis('off')\r\n# Plot one fill_between at x, y = 0, width = 100 and height = 50\r\nax.fill_between([0, 100], 0, 50, color='r')\r\n# Plot another fill_between at x = 65536, y = 50, width=100 and height = 50\r\n# 65536 causes the 16-bit integer to overflow so that the coordinate becomes actually 0\r\nax.fill_between([2 ** 16, 2 ** 16 + 100], 50, 100, color='b')\r\n# Set limits to ensure that one pixel in the rasterized image corresponds to one unit in the axis\r\nax.set_xlim(-10, 110)\r\nax.set_ylim(-10, 110)\r\n# Agg has the bug, Pdf does not\r\nplt.savefig('bug.png', dpi=1)\r\nplt.savefig('nobug.pdf', dpi=1)\r\nplt.show()\n```\n\n\n### Actual outcome\n\nThe PolyCollections are both drawn in the image, even though they are 65536 units apart and the x axis goes from -10 to 110.\r\n![bug](https://user-images.githubusercontent.com/22271977/189086700-199e718e-63f4-4928-800e-7075154a449a.png)\r\n\n\n### Expected outcome\n\nThere should only be the red rectangle, as in this PDF.\r\n[nobug.pdf](https://github.com/matplotlib/matplotlib/files/9525611/nobug.pdf)\r\n\n\n### Additional information\n\nI debugged this quite a bit, and turns out it is a bit tricky to replicate this. The PolyCollections need to be able to fit in the axes completely so that the optimized `draw_markers` function [is called](https://github.com/matplotlib/matplotlib/blob/3b79f63980c767fabc59ec5ba267818d8b4b5671/lib/matplotlib/collections.py#L406). Then, inside Agg, transforms are applied so that pixel coordinates are calculated. These coordinates are fine, as they use 32-bit integers. However, when Agg draws the scanlines, it converts the coordinates to 16-bit integers. If the axis is zoomed in enough and everything lines up just right, some points that have very high positive or very high negative pixel coordinates may appear in the viewport because the int16 conversion causes the 16-bit coordinate to over- or underflow and to be inside the viewport. An obvious fix could be to use int32 instead of int16 while drawing, but I don't know if that's possible or if matplotlib is even the right place to report, as this bug seems to be in Agg code. The original figure where I discovered this had many fill_betweens, and when zoomed in, some fill_betweens from earlier or later in the data would appear.\r\n\r\nNote that at least on my machine, the figure that is shown in the window might not have the bug present, but the saved PNG file should have it.\r\n\r\nI checked also the main branch (version `3.6.0.dev3132+gf8cf0ee5e7`), and it has the bug.\n\n### Operating system\n\nProbably anything where Agg runs (verified on RHEL8 and Windows)\n\n### Matplotlib Version\n\n3.5.3\n\n### Matplotlib Backend\n\nQtAgg\n\n### Python version\n\n3.9.13\n\n### Jupyter version\n\n_No response_\n\n### Installation\n\nconda","author":{"url":"https://github.com/Exploder98","@type":"Person","name":"Exploder98"},"datePublished":"2022-09-08T12:24:17.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":6},"url":"https://github.com/23826/matplotlib/issues/23826"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:43cc70ef-b209-a249-4a0e-7dc9894e863c
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idDC24:26AD97:10AF0A3:165827B:6A529B8D
html-safe-noncebb0f13f019ef08cf894e8f6d004e66c200a6604e5cab4d4b7ed76b6a8b2c1c5c
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEQzI0OjI2QUQ5NzoxMEFGMEEzOjE2NTgyN0I6NkE1MjlCOEQiLCJ2aXNpdG9yX2lkIjoiMTU1ODkwMzY5Mzc3MTk3MTQ2OSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmacddf48caf69972cfc58080deddde57962514d5d6486e9518dd39b75a9369ae919
hovercard-subject-tagissue:1366212510
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/matplotlib/matplotlib/23826/issue_layout
twitter:imagehttps://opengraph.githubassets.com/953e29b2dd7122286434141537660086a33197d5887f46a4760f43d85a620e43/matplotlib/matplotlib/issues/23826
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/953e29b2dd7122286434141537660086a33197d5887f46a4760f43d85a620e43/matplotlib/matplotlib/issues/23826
og:image:altBug summary Because the pixel x coordinates of scanline cells are casted from 32-bit integers to 16-bit ones in Agg (this line), some polygons that are outside the drawing area may actually be draw...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernameExploder98
hostnamegithub.com
expected-hostnamegithub.com
Noneb9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb
turbo-cache-controlno-preview
go-importgithub.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git
octolytics-dimension-user_id215947
octolytics-dimension-user_loginmatplotlib
octolytics-dimension-repository_id1385122
octolytics-dimension-repository_nwomatplotlib/matplotlib
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1385122
octolytics-dimension-repository_network_root_nwomatplotlib/matplotlib
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release07a982c1d40157c619b364352b704c3ce66bb332
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/matplotlib/matplotlib/issues/23826#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmatplotlib%2Fmatplotlib%2Fissues%2F23826
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmatplotlib%2Fmatplotlib%2Fissues%2F23826
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=matplotlib%2Fmatplotlib
Reloadhttps://github.com/matplotlib/matplotlib/issues/23826
Reloadhttps://github.com/matplotlib/matplotlib/issues/23826
Reloadhttps://github.com/matplotlib/matplotlib/issues/23826
Please reload this pagehttps://github.com/matplotlib/matplotlib/issues/23826
matplotlib https://github.com/matplotlib
matplotlibhttps://github.com/matplotlib/matplotlib
Please reload this pagehttps://github.com/matplotlib/matplotlib/issues/23826
Notifications https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Fork 8.4k https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Star 23k https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Code https://github.com/matplotlib/matplotlib
Issues 1.1k https://github.com/matplotlib/matplotlib/issues
Pull requests 408 https://github.com/matplotlib/matplotlib/pulls
Actions https://github.com/matplotlib/matplotlib/actions
Projects https://github.com/matplotlib/matplotlib/projects
Wiki https://github.com/matplotlib/matplotlib/wiki
Security and quality 0 https://github.com/matplotlib/matplotlib/security
Insights https://github.com/matplotlib/matplotlib/pulse
Code https://github.com/matplotlib/matplotlib
Issues https://github.com/matplotlib/matplotlib/issues
Pull requests https://github.com/matplotlib/matplotlib/pulls
Actions https://github.com/matplotlib/matplotlib/actions
Projects https://github.com/matplotlib/matplotlib/projects
Wiki https://github.com/matplotlib/matplotlib/wiki
Security and quality https://github.com/matplotlib/matplotlib/security
Insights https://github.com/matplotlib/matplotlib/pulse
#28904https://github.com/matplotlib/matplotlib/pull/28904
[Bug]: Overflow of 16-bit integer in Agg renderer causes PolyCollections to be drawn at incorrect locationshttps://github.com/matplotlib/matplotlib/issues/23826#top
#28904https://github.com/matplotlib/matplotlib/pull/28904
backend: agghttps://github.com/matplotlib/matplotlib/issues?q=state%3Aopen%20label%3A%22backend%3A%20agg%22
v3.10.0https://github.com/matplotlib/matplotlib/milestone/84
https://github.com/Exploder98
Exploder98https://github.com/Exploder98
on Sep 8, 2022https://github.com/matplotlib/matplotlib/issues/23826#issue-1366212510
this linehttps://github.com/matplotlib/matplotlib/blob/3b79f63980c767fabc59ec5ba267818d8b4b5671/extern/agg24-svn/include/agg_scanline_p.h#L96
https://user-images.githubusercontent.com/22271977/189086700-199e718e-63f4-4928-800e-7075154a449a.png
nobug.pdfhttps://github.com/matplotlib/matplotlib/files/9525611/nobug.pdf
is calledhttps://github.com/matplotlib/matplotlib/blob/3b79f63980c767fabc59ec5ba267818d8b4b5671/lib/matplotlib/collections.py#L406
backend: agghttps://github.com/matplotlib/matplotlib/issues?q=state%3Aopen%20label%3A%22backend%3A%20agg%22
v3.10.0https://github.com/matplotlib/matplotlib/milestone/84
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.