Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(PatternBrush): getPatternSrc, rm getPatternSrcFunction #8468

Merged
merged 11 commits into from Nov 26, 2022

Conversation

ShaMan123
Copy link
Contributor

@ShaMan123 ShaMan123 commented Nov 25, 2022

Motivation

#8455 (comment)

Description

getPatternSrcFunction was weird, mutating the function itself by converting it to string. Bad practice and no need for it.
It seemed that in v4/v5 Pattern stopped accepting strings to execute as functions, breaking PatternBrush. It was forgotten since (I am guessing) it had no tests.
So I have removed the method to align with Pattern and added tests that cover these cases.
Refactored PatternBrush.getPatternSrc signature to accept color as an arg. Am not sure it is needed to say the truth. We can use this.color because the function runs in context always, seems so.

Changes

Non breaking since this.color will still work as expected in getPatternSrc

Gist

Added visual tests.
Found a leak in test config.

In Action

@github-actions
Copy link
Contributor

github-actions bot commented Nov 25, 2022

Build Stats

file / KB (diff) bundled minified
fabric 1042.188 (-0.198) 311.247 (-0.124)

@github-actions
Copy link
Contributor

github-actions bot commented Nov 25, 2022

Coverage after merging fix-pattern-brush-src-func into master will be

82.64%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
HEADER.js54%48.15%0%63.64%12, 14, 14, 14, 14, 14, 16–17, 21, 21–22, 22, 22, 24, 24, 26, 28, 30–31, 77, 77, 77
src
   cache.ts97.06%90%100%100%56
   canvas.class.ts93.36%90.22%94.12%95.54%1047, 1047–1048, 1051, 1071, 1071, 1106, 1139–1140, 1168–1169, 1202, 1210, 1320–1321, 1323–1324, 1344–1345, 1506, 1511, 1521, 1525, 474–475, 480, 489, 638–640, 685–686, 735–736, 739, 741, 784–786, 828, 833–834, 862–863
   config.ts77.27%66.67%66.67%84.62%130, 138–140, 151–153
   constants.ts100%100%100%100%
   intersection.class.ts100%100%100%100%
   pattern.class.ts92.19%85.71%100%96.30%109, 115, 126, 135, 87
   point.class.ts100%100%100%100%
   shadow.class.ts98.51%96%100%100%156
   static_canvas.class.ts90.15%83.90%96.70%92.73%1112–1113, 1113, 1113–1114, 1248, 1314–1315, 1318, 1367–1368, 1461, 1476, 1480, 1506–1507, 1536–1537, 1570–1571, 1612–1613, 1616, 1618, 1618, 1618, 1618, 1622, 1622, 1622–1624, 1646–1647, 1688–1689, 1692, 1694, 1694, 1694, 1694, 1698, 1698, 1698–1700, 1771, 1771–1772, 1830, 1832, 1832, 1832, 1832, 1832–1833, 1836–1837, 1837, 1837–1838, 1841, 1841, 1841, 1843, 1846, 1852, 1854–1855, 1855, 1855, 1858–1859, 1859, 1859, 1862, 319–320, 322–323, 325–326, 339–340, 342–343, 57, 658–661, 861
src/brushes
   base_brush.class.ts100%100%100%100%
   circle_brush.class.ts1.52%0%0%2%101, 103–105, 114, 114, 114, 116, 118, 120–122, 124–127, 135, 142, 144, 24, 29–30, 38–42, 46–50, 57–60, 68–72, 74, 82, 82, 82, 82, 82–83, 85, 85, 85–88, 90, 98–99
   pattern_brush.class.ts97.14%87.50%100%100%22
   pencil_brush.class.ts91.91%85.42%100%93.64%123–124, 153, 153–155, 277, 281, 286–287, 69–70, 85–86
   spray_brush.class.ts1.16%0%0%1.56%100–102, 104–105, 113, 113, 113, 113, 113–114, 116–117, 124–125, 127, 129–133, 142, 146–147, 147, 155, 155, 155–158, 160–163, 167–168, 170, 172–175, 178, 185–186, 188, 190–191, 193, 200–201, 203–204, 207, 207, 214, 214, 218, 23–24, 26–28, 28, 28–30, 34, 43, 50, 57, 64, 71, 78, 90–92
src/color
   color.class.ts91.67%84.51%100%94.44%325–326, 330–331, 334–335, 41, 45, 72–73, 73, 75, 75, 75–76, 78–79
   color_map.ts100%100%100%100%
   constants.ts100%100%100%100%
   index.ts100%100%100%100%
   util.ts100%100%100%100%
src/controls
   actions.ts100%100%100%100%
   changeWidth.ts100%100%100%100%
   control.class.ts93.98%88.89%90.91%97.78%235, 319, 319, 354
   controls.render.ts81.63%78%100%84.78%106, 111, 121, 121, 45, 50, 61, 61, 65–72, 81–82
   default_controls.ts81.82%66.67%100%100%113, 120
   drag.ts100%100%100%100%
   rotate.ts20%12.50%50%22.22%45, 51, 51, 51–52, 55–57, 59, 59, 59, 59, 59–61, 61, 61–63, 65, 65, 65–67, 67, 67–68, 73, 73, 73–74, 76, 78, 80–81
   scale.ts94.41%94.74%100%93.59%129–130, 132–134, 181–183, 42
   scaleSkew.ts80.56%66.67%100%92.31%14, 28, 30, 30, 30, 32, 34
   skew.ts91.03%79.31%100%97.67%130–131, 162–163, 170, 176, 178
   util.ts100%100%100%100%
   wrapWithFireEvent.ts100%100%100%100%
   wrapWithFixedAnchor.ts100%100%100%100%
src/filters
   2d_backend.class.ts92%83.33%100%93.75%35–36
   FilterBackend.ts88.89%83.33%100%90%11–12
   WebGLProbe.ts40.54%40%60%36.36%28–30, 30, 30–31, 33–35, 43, 46–48, 48, 48–51, 53, 58
   base_filter.class.ts22.35%20.41%38.10%20%100, 102–104, 104, 104–105, 112–114, 114, 114–115, 122–125, 125, 125–126, 132, 132, 132–135, 153, 183–188, 192–193, 193, 193–196, 196, 196, 196, 196–198, 204, 213–214, 219–223, 266–269, 285, 285, 285–286, 288, 304–306, 306, 306, 306, 306–307, 309, 311–312, 314–315, 317–319, 327–328, 33, 330, 334–336, 340, 340, 340, 344, 344, 344–345, 367, 367, 367–371, 54–55, 83–84, 86, 86, 86–87, 87, 90, 95–97, 99, 99, 99, 99, 99, 99
   blendcolor_filter.class.ts10%4.76%28.57%9.72%104, 126, 128, 128, 128–130, 135, 145–147, 155, 157–160, 162–165, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 169–172, 174–177, 179–182, 185–188, 190–193, 195–198, 200–203, 205–206, 206, 209–210, 210, 213–214, 214, 217, 219–222, 224–226, 238, 250–255, 281
   blendimage_filter.class.ts

@ShaMan123 ShaMan123 mentioned this pull request Nov 25, 2022
Copy link
Contributor Author

@ShaMan123 ShaMan123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

READY and TESTED

fabric.Object.prototype.objectCaching = true;
});
hooks.after(() => {
// fabric.config.restoreDefaults();
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is really bad.
Other suites depend on some configuration made in this test that leaks.

@ShaMan123 ShaMan123 changed the title fix(PatternBrush): rm getPatternSrcFunction fix(PatternBrush): getPatternSrc, rm getPatternSrcFunction Nov 25, 2022
@asturur
Copy link
Member

asturur commented Nov 26, 2022

The patternBrush is more likely a demo / blueprint rather than something useful.
I don't think the color parameter is needed, all other brushes work using the color property on the instance

@asturur
Copy link
Member

asturur commented Nov 26, 2022

on top of that getPatternSrcFunction imho was a possible security flaw.
Imaging adding to this.color a kind of function that then gets executed with the same rights as any javascript loaded on the website.
Definetely a security issue, reason why Pattern does not have that function anymore

@asturur asturur merged commit 1f814e2 into master Nov 26, 2022
@asturur asturur deleted the fix-pattern-brush-src-func branch November 27, 2022 00:14
frankrousseau pushed a commit to cgwire/fabric.js that referenced this pull request Jan 6, 2023
Co-authored-by: Andrea Bogazzi <andreabogazzi79@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants