{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":5390156,"defaultBranch":"master","name":"fontforge","ownerLogin":"fontforge","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2012-08-12T17:08:20.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2048660?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1708816424.0","currentOid":""},"activityList":{"items":[{"before":"4b60c873ebe4a2e4dce251eb1087d4cc050eb34a","after":"cce02b132c698b4568e7823abdd2f1b3daa32b5e","ref":"refs/heads/master","pushedAt":"2024-04-23T19:34:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Defer crowdin update to the end of the pipeline (#5409)","shortMessageHtmlLink":"Defer crowdin update to the end of the pipeline (#5409)"}},{"before":"fe39b7b17a76e329f9718a1785b71323bbff5ebc","after":"4b60c873ebe4a2e4dce251eb1087d4cc050eb34a","ref":"refs/heads/master","pushedAt":"2024-04-20T17:20:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Fix export of supplementary plane characters in font name to TTF (#5396)\n\n* TTF names as UTF-16\r\n* Remove heavy font from bulk testing\r\n* Allow missing output in bulk testing\r\n* Remove debug print\r\n* Represent UTF-16 strings with uint16_t\r\n* Extract utf82utf16_copy()\r\n* Fix crash\r\n* Fix local variable capacity","shortMessageHtmlLink":"Fix export of supplementary plane characters in font name to TTF (#5396)"}},{"before":"996409017bc1ae953a86a4c4dd6fa7941ec1d278","after":"fe39b7b17a76e329f9718a1785b71323bbff5ebc","ref":"refs/heads/master","pushedAt":"2024-04-20T17:01:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Don't attempt to copy anchors into NULL font (#5405)\n\nAny time `SFDDumpUndo()` or `SFDGetUndo()` are run, they end up calling\r\n`SplineCharCopy()` with `NULL` for the `SplineFont *into` parameter.\r\nWhen this happens, `SplineCharCopy()` attempts to copy the anchors into\r\nthe new SplineChar's `parent` font, but since that is set to `NULL` it\r\ncrashes when `AnchorPointsDuplicate()` attempts to read from\r\n`sc->parent->anchor`.\r\n\r\nBecause `SFDDumpUndo()` and `SFDGetUndo()` appear to only do this so\r\nthat they can have a copy of the character's hints at a given undo state\r\n(and then copy thoes hints into or out of the .sfd file), never affect\r\nanchor classes, and delete the parentless SplineChar immediately after,\r\nI've determined that it's safe to simply not duplicate the AnchorPoints\r\nwhen `into` is set to `NULL`.\r\n\r\nTo do this, instead of setting `nsc->anchor` to the output returned by\r\n`AnchorPointsDuplicate()`, I use a ternary statement to detect whether\r\nor not `into` is NULL. If it is, then `nsc->anchor` is set to NULL, and\r\notherwise the value returned by `AnchorPointsDuplicate()` is used. I\r\ndecided not to do the reverse (which could have made the code shorter)\r\nsimply because line 505 already includes a similar ternary statement\r\nthat checks if `into` is `NULL`, and I decided to use the same format.\r\n\r\nThis fixes #5130, and is a slightly more elegant variation of the same\r\nfix that I had proposed back then (more elegant because I skip the\r\nentire `AnchorPointsDuplicate()` function call instead of merely\r\nskipping over the loop that makes up the majority of the function). I\r\ndon't see a reason for this to be functionally any different from the\r\noriginally proposed solution, and I've extensively used FontForge with\r\nthat change made with no further `AnchorPoint` crashes.\r\n\r\nA more 'proper' fix would probably include systematic changes to how\r\nhint undoes are saved and loaded from SFD files, but that's beyond my\r\nskill and, quite honestly, not something I even care about that much.\r\nThat code appears to work despite it's oddities, and simply checking if\r\n`into==NULL` before doing anything with the `AnchorPoints` allows all\r\nthe hint-related stuff that `SplineCharCopy()` does continue to work for\r\nthe sake of both `SFDDumpUndo()` and `SFDGetUndo()`.","shortMessageHtmlLink":"Don't attempt to copy anchors into NULL font (#5405)"}},{"before":"95f2b644ee3081cbe9d39e6d5cd634cbb9a0377a","after":"996409017bc1ae953a86a4c4dd6fa7941ec1d278","ref":"refs/heads/master","pushedAt":"2024-03-04T06:39:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Treat FT_PIXEL_MODE_MONO as 2 grey levels (#5379)","shortMessageHtmlLink":"Treat FT_PIXEL_MODE_MONO as 2 grey levels (#5379)"}},{"before":"4aaa5e4097cfc85040121d250bcff78042b0f22e","after":"95f2b644ee3081cbe9d39e6d5cd634cbb9a0377a","ref":"refs/heads/master","pushedAt":"2024-03-04T06:39:43.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Compare vertical metrics check when generating TTC (#5372)","shortMessageHtmlLink":"Compare vertical metrics check when generating TTC (#5372)"}},{"before":"9f2d72e3a8aba1be0989494c166a5d9e27d8e73d","after":"4aaa5e4097cfc85040121d250bcff78042b0f22e","ref":"refs/heads/master","pushedAt":"2024-03-04T06:23:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Fix data corruption on SFD reading (#5380)","shortMessageHtmlLink":"Fix data corruption on SFD reading (#5380)"}},{"before":"c911e822fef21d81be4c77f3180657885508c2dc","after":"9f2d72e3a8aba1be0989494c166a5d9e27d8e73d","ref":"refs/heads/master","pushedAt":"2024-02-25T12:04:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"doc: added missing sudo to installation instructions (#5300)","shortMessageHtmlLink":"doc: added missing sudo to installation instructions (#5300)"}},{"before":"ba9f786e09ef58eae512e488a71469656fe4a269","after":"c911e822fef21d81be4c77f3180657885508c2dc","ref":"refs/heads/master","pushedAt":"2024-02-25T11:47:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Remove `psaltnames` for multi-code-point names (#5305)","shortMessageHtmlLink":"Remove psaltnames for multi-code-point names (#5305)"}},{"before":null,"after":"f718634e1e4563f09442dbd8625270957420b6d6","ref":"refs/heads/qt","pushedAt":"2024-02-24T23:13:44.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jtanx","name":"Jeremy Tan","path":"/jtanx","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5137410?s=80&v=4"},"commit":{"message":"Image fixes + transient fixes","shortMessageHtmlLink":"Image fixes + transient fixes"}},{"before":"4eec2b8115a97c379a544927299d187d2d4355b7","after":"ba9f786e09ef58eae512e488a71469656fe4a269","ref":"refs/heads/master","pushedAt":"2024-02-06T09:10:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Support suplementary planes in SFD (emojis etc.) (#5364)","shortMessageHtmlLink":"Support suplementary planes in SFD (emojis etc.) (#5364)"}},{"before":"216eb14b558df344b206bf82e2bdaf03a1f2f429","after":"4eec2b8115a97c379a544927299d187d2d4355b7","ref":"refs/heads/master","pushedAt":"2024-02-06T09:08:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Fix the lists of Windows language IDs (#5359)","shortMessageHtmlLink":"Fix the lists of Windows language IDs (#5359)"}},{"before":"f5a13bbdee308393995a7ddf7d861e83ead45fa6","after":"216eb14b558df344b206bf82e2bdaf03a1f2f429","ref":"refs/heads/master","pushedAt":"2024-02-06T09:03:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"fix splinefont shell command injection (#5367)","shortMessageHtmlLink":"fix splinefont shell command injection (#5367)"}},{"before":"eff88fc98a5801190ddf6adefa67c9f78b65fd1a","after":"f5a13bbdee308393995a7ddf7d861e83ead45fa6","ref":"refs/heads/master","pushedAt":"2024-02-04T00:14:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Bulk tester (#5365)","shortMessageHtmlLink":"Bulk tester (#5365)"}},{"before":"986f919997215865571d9d7524b457c5c7119cf6","after":"eff88fc98a5801190ddf6adefa67c9f78b65fd1a","ref":"refs/heads/master","pushedAt":"2024-02-01T07:27:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"add `font.style_set_names` attribute to Python API (#5354)","shortMessageHtmlLink":"add font.style_set_names attribute to Python API (#5354)"}},{"before":"173162c60f7dc77c64eafa08d5bbd9db90195e1b","after":"986f919997215865571d9d7524b457c5c7119cf6","ref":"refs/heads/master","pushedAt":"2024-01-29T00:38:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Fix typos in the FAQ (#5355)","shortMessageHtmlLink":"Fix typos in the FAQ (#5355)"}},{"before":"d500c55664c45005fddfa1a003e924fd64b52f3a","after":"173162c60f7dc77c64eafa08d5bbd9db90195e1b","ref":"refs/heads/master","pushedAt":"2024-01-28T22:56:43.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Autoselect internal WOFF2 format (#5346)","shortMessageHtmlLink":"Autoselect internal WOFF2 format (#5346)"}},{"before":"6c66dfe12db11f305ba2019570341ff3051ddba2","after":"d500c55664c45005fddfa1a003e924fd64b52f3a","ref":"refs/heads/master","pushedAt":"2024-01-28T22:48:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"fix segfault triggered by Python `del c[i:j]` (#5352)","shortMessageHtmlLink":"fix segfault triggered by Python del c[i:j] (#5352)"}},{"before":"cd36c82ed49edb2d55c3bcda8480fb39b9df3c39","after":"6c66dfe12db11f305ba2019570341ff3051ddba2","ref":"refs/heads/master","pushedAt":"2024-01-28T22:10:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"add `font` attributes, method to Python docs (#5353)\n\nadd `font.os2_capheight`, `font.os2_xheight` and `font.reencode()`\r\nalso fix sorting mistakes of attributes","shortMessageHtmlLink":"add font attributes, method to Python docs (#5353)"}},{"before":"d7c6897111e61c1a305099cab312b090d2aeb830","after":"cd36c82ed49edb2d55c3bcda8480fb39b9df3c39","ref":"refs/heads/master","pushedAt":"2024-01-28T21:59:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Always set `usDefaultChar` to 0 (.notdef) (#5242)","shortMessageHtmlLink":"Always set usDefaultChar to 0 (.notdef) (#5242)"}},{"before":"99d52251a0686cd78e3f3c714f169be675fec20e","after":"d7c6897111e61c1a305099cab312b090d2aeb830","ref":"refs/heads/master","pushedAt":"2024-01-23T06:55:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Fix generateFontPostHook being called instead of generateFontPreHook (#5226)","shortMessageHtmlLink":"Fix generateFontPostHook being called instead of generateFontPreHook (#…"}},{"before":"5dcdbe195ee983480b6b4df15bc016bd34003980","after":"99d52251a0686cd78e3f3c714f169be675fec20e","ref":"refs/heads/master","pushedAt":"2024-01-16T22:02:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"nltransform of anchor points (#5345)","shortMessageHtmlLink":"nltransform of anchor points (#5345)"}},{"before":"bea888ab5becd99fdb1bf7370c2f43f54225d218","after":"5dcdbe195ee983480b6b4df15bc016bd34003980","ref":"refs/heads/master","pushedAt":"2024-01-10T08:29:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Don't require individual tuple encapsulation in fontforge.font.bitmapSizes setter (#5138)","shortMessageHtmlLink":"Don't require individual tuple encapsulation in fontforge.font.bitmap…"}},{"before":"c45654663509da24be35aab1839b80b8cc2758dd","after":"bea888ab5becd99fdb1bf7370c2f43f54225d218","ref":"refs/heads/master","pushedAt":"2024-01-10T08:27:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Fix CMake function _get_git_version() (#5342)","shortMessageHtmlLink":"Fix CMake function _get_git_version() (#5342)"}},{"before":"417800fe82045cebdb4f11d68852242e169c44c6","after":"c45654663509da24be35aab1839b80b8cc2758dd","ref":"refs/heads/master","pushedAt":"2024-01-10T08:24:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Handle failed iconv conversion. Unhandled execution path was UB, causing a segfault for me (#5329)","shortMessageHtmlLink":"Handle failed iconv conversion. Unhandled execution path was UB, caus…"}},{"before":"8f0308e722dfc9d57006675603e42bff98d89c16","after":"417800fe82045cebdb4f11d68852242e169c44c6","ref":"refs/heads/master","pushedAt":"2024-01-05T08:04:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Fix crash in parsegvar() due to insufficient buffer (#5339)","shortMessageHtmlLink":"Fix crash in parsegvar() due to insufficient buffer (#5339)"}},{"before":"71cbff06a16383fce77c604924188afffe8bae6c","after":"8f0308e722dfc9d57006675603e42bff98d89c16","ref":"refs/heads/master","pushedAt":"2024-01-04T23:59:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Quiet strict prototypes warnings. (#5313)","shortMessageHtmlLink":"Quiet strict prototypes warnings. (#5313)"}},{"before":"1926b35e09377535e45956a3f7edcb7c684989b9","after":"71cbff06a16383fce77c604924188afffe8bae6c","ref":"refs/heads/master","pushedAt":"2024-01-04T10:38:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"harmonizing can now no longer produce zero handles, the computation of harmonization is now numerically robust (#5262)","shortMessageHtmlLink":"harmonizing can now no longer produce zero handles, the computation o…"}},{"before":"16f3d219063f1697d8e62b3d28584d8b5a3449bf","after":"1926b35e09377535e45956a3f7edcb7c684989b9","ref":"refs/heads/master","pushedAt":"2024-01-04T08:57:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Fix glyph file names uXXXXX (#5333)","shortMessageHtmlLink":"Fix glyph file names uXXXXX (#5333)"}},{"before":"11647df597f4916672b875eb45f669af9b17767a","after":"16f3d219063f1697d8e62b3d28584d8b5a3449bf","ref":"refs/heads/master","pushedAt":"2024-01-04T06:58:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Fix lookup flags parsing (#5338)","shortMessageHtmlLink":"Fix lookup flags parsing (#5338)"}},{"before":"6be896054d35278206f2399b81541464a85a16ac","after":"11647df597f4916672b875eb45f669af9b17767a","ref":"refs/heads/master","pushedAt":"2024-01-02T21:31:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"skef","name":null,"path":"/skef","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6175836?s=80&v=4"},"commit":{"message":"Duplicate libfontforge.dll for \"py\" and \"pyhook\" tests. (#5335)","shortMessageHtmlLink":"Duplicate libfontforge.dll for \"py\" and \"pyhook\" tests. (#5335)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEOG_ZhAA","startCursor":null,"endCursor":null}},"title":"Activity · fontforge/fontforge"}