<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugzilla.yoctoproject.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugzilla.yoctoproject.org/"
          
          maintainer="it-coreprojects-helpdesk@linuxfoundation.org"
>

    <bug>
          <bug_id>16247</bug_id>
          
          <creation_ts>2026-04-15 12:24:02 +0000</creation_ts>
          <short_desc>patchtest: Check for missing spaces in modified patches</short_desc>
          <delta_ts>2026-04-20 18:19:37 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>6</classification_id>
          <classification>Yocto Project Subprojects</classification>
          <product>Patchwork/Patchtest</product>
          <component>Patchtest</component>
          <version>unspecified</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Multiple</op_sys>
          <bug_status>IN PROGRESS IMPLEMENTATION</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>Medium</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>6.1</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yoann Congal">yoann.congal</reporter>
          <assigned_to name="Trevor Gamblin">tgamblin</assigned_to>
          <cc>randy.macleod</cc>
          
          
          <cf_os>---</cf_os>
          <cf_regression_type>---</cf_regression_type>
          
          <cf_docchange>No (bug/feature does not impact docs)</cf_docchange>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105074</commentid>
    <comment_count>0</comment_count>
    <who name="Yoann Congal">yoann.congal</who>
    <bug_when>2026-04-15 12:24:02 +0000</bug_when>
    <thetext>In patches, an empty context line translate to a patch line &quot;+ &quot;.
Some tools consider the space ending the line an error, remove it and technically corrupt the patch.

We could add a check in patchtest to error on such patches.

Counterpoint: GNU patch (and most the patch tools I could find) handle this case gracefully and silently.

Related:
9876 – patchtest-oe: check that attached SW patches does not contain trailing spaces
https://bugzilla.yoctoproject.org/show_bug.cgi?id=9876</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105155</commentid>
    <comment_count>1</comment_count>
      <attachid>5208</attachid>
    <who name="Yoann Congal">yoann.congal</who>
    <bug_when>2026-04-20 12:52:32 +0000</bug_when>
    <thetext>Created attachment 5208
Vibe-coded (Gemini) PoC script to check patch missing white space in context (It does work)

Added my vibe-coded (Gemini) PoC script to check patch missing white spaces in context. It does work.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5208</attachid>
            <date>2026-04-20 12:52:32 +0000</date>
            <delta_ts>2026-04-20 12:52:32 +0000</delta_ts>
            <desc>Vibe-coded (Gemini) PoC script to check patch missing white space in context (It does work)</desc>
            <filename>check_patch.py</filename>
            <type>text/x-python</type>
            <size>2714</size>
            <attacher name="Yoann Congal">yoann.congal</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIEFzc2lzdGVkLWJ5OiBHZW1pbmkKaW1wb3J0IGFyZ3Bh
cnNlCmltcG9ydCBzeXMKZnJvbSB1bmlkaWZmIGltcG9ydCBQYXRjaFNldApmcm9tIHVuaWRpZmYu
ZXJyb3JzIGltcG9ydCBVbmlkaWZmUGFyc2VFcnJvcgoKZGVmIG1haW4oKToKICAgIHBhcnNlciA9
IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJWYWxpZGF0ZSB0aGUgZm9ybWF0
IG9mIGEgdW5pZmllZCBkaWZmIHBhdGNoIHVzaW5nIHVuaWRpZmYuIikKICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoInBhdGNoX2ZpbGUiLCBoZWxwPSJQYXRoIHRvIHRoZSB1bmlmaWVkIGRpZmYgcGF0
Y2ggZmlsZSB0byB2YWxpZGF0ZS4iKQogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAg
ICB0cnk6CiAgICAgICAgIyBSZWFkIHJhdyBsaW5lcyBmb3Igc3RyaWN0IHByZWZpeCBjaGVja2lu
ZwogICAgICAgIHdpdGggb3BlbihhcmdzLnBhdGNoX2ZpbGUsICdyJywgZW5jb2Rpbmc9J3V0Zi04
JywgZXJyb3JzPSdpZ25vcmUnKSBhcyBmOgogICAgICAgICAgICByYXdfbGluZXMgPSBmLnJlYWRs
aW5lcygpCgogICAgICAgICMgQXR0ZW1wdCB0byBwYXJzZSB0aGUgcGF0Y2ggZmlsZQogICAgICAg
ICMgVGhpcyB3aWxsIHJhaXNlIFVuaWRpZmZQYXJzZUVycm9yIGlmIHRoZSBiYXNpYyBzdHJ1Y3R1
cmUgaXMgaW52YWxpZAogICAgICAgIHBhdGNoID0gUGF0Y2hTZXQuZnJvbV9maWxlbmFtZShhcmdz
LnBhdGNoX2ZpbGUpCiAgICAgICAgCiAgICAgICAgIyBDaGVjayBpZiB0aGUgcGF0Y2ggc2V0IGlz
IGFjdHVhbGx5IGVtcHR5CiAgICAgICAgaWYgbGVuKHBhdGNoKSA9PSAwOgogICAgICAgICAgICAg
cHJpbnQoZiJXYXJuaW5nOiAne2FyZ3MucGF0Y2hfZmlsZX0nIGNvbnRhaW5zIG5vIHZhbGlkIHBh
dGNoIGRhdGEgb3IgaXMgZW1wdHkuIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgc3lz
LmV4aXQoMSkKCiAgICAgICAgIyBTdHJpY3QgdmFsaWRhdGlvbjogQ2hlY2sgdGhhdCBldmVyeSBs
aW5lIGluIGV2ZXJ5IGh1bmsgc3RhcnRzIHdpdGggYSB2YWxpZCBwcmVmaXggKCcgJywgJysnLCAn
LScsICdcJykKICAgICAgICAjIHVuaWRpZmYgaXMgc29tZXRpbWVzIHRvbyBsZW5pZW50IGFuZCBh
bGxvd3MgY29tcGxldGVseSBlbXB0eSBsaW5lcyBhcyBjb250ZXh0IGxpbmVzLgogICAgICAgIGZv
ciBwYXRjaGVkX2ZpbGUgaW4gcGF0Y2g6CiAgICAgICAgICAgIGZvciBodW5rIGluIHBhdGNoZWRf
ZmlsZToKICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGh1bms6CiAgICAgICAgICAgICAgICAg
ICAgIyBkaWZmX2xpbmVfbm8gaXMgMS1pbmRleGVkCiAgICAgICAgICAgICAgICAgICAgaWYgbGlu
ZS5kaWZmX2xpbmVfbm86CiAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGxpbmUuZGlmZl9s
aW5lX25vIC0gMQogICAgICAgICAgICAgICAgICAgICAgICBpZiBpZHggPCBsZW4ocmF3X2xpbmVz
KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19saW5lID0gcmF3X2xpbmVzW2lkeF0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByYXdfbGluZS5zdGFydHN3aXRoKCgn
ICcsICcrJywgJy0nLCAnXFwnKSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp
bnQoZiJFcnJvcjogTWFsZm9ybWVkIHBhdGNoIGxpbmUgYXQge2FyZ3MucGF0Y2hfZmlsZX06e2xp
bmUuZGlmZl9saW5lX25vfSIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmludChmIkxpbmUgY29udGVudDoge3JlcHIocmF3X2xpbmUpfSIsIGZpbGU9
c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiQ29udGV4
dCBsaW5lcyBtdXN0IHN0YXJ0IHdpdGggZXhhY3RseSBvbmUgc3BhY2UuIFRoaXMgbGluZSBpcyBt
aXNzaW5nIGl0cyBwcmVmaXguIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN5cy5leGl0KDEpCgogICAgICAgIHByaW50KGYiU3VjY2VzczogJ3thcmdz
LnBhdGNoX2ZpbGV9JyBpcyBhIHZhbGlkIHVuaWZpZWQgZGlmZiBwYXRjaC4iLCBmaWxlPXN5cy5z
dGRvdXQpCiAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAKICAgIGV4Y2VwdCBVbmlkaWZmUGFy
c2VFcnJvciBhcyBlOgogICAgICAgIHByaW50KGYiRXJyb3I6IE1hbGZvcm1lZCBwYXRjaCBmaWxl
ICd7YXJncy5wYXRjaF9maWxlfScuIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHByaW50KGYi
RGV0YWlsczoge2V9IiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHByaW50KCJcbkNvbW1vbiBp
c3N1ZTogQ29udGV4dCBsaW5lcyBtdXN0IHN0YXJ0IHdpdGggZXhhY3RseSBvbmUgc3BhY2UuIiwg
ZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHN5cy5leGl0KDEpCiAgICBleGNlcHQgRmlsZU5vdEZv
dW5kRXJyb3I6CiAgICAgICAgcHJpbnQoZiJFcnJvcjogRmlsZSAne2FyZ3MucGF0Y2hfZmlsZX0n
IG5vdCBmb3VuZC4iLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgc3lzLmV4aXQoMSkKICAgIGV4
Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwcmludChmIkFuIHVuZXhwZWN0ZWQgZXJyb3Ig
b2NjdXJyZWQ6IHtlfSIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICBzeXMuZXhpdCgyKQoKaWYg
X19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo=
</data>
<flag name="commit"
          id="22"
          type_id="4"
          status="-"
          setter="yoann.congal"
    />
    <flag name="copyright-waived"
          id="23"
          type_id="2"
          status="+"
          setter="yoann.congal"
    />
    <flag name="review"
          id="24"
          type_id="3"
          status="-"
          setter="yoann.congal"
    />
          </attachment>
      

    </bug>

</bugzilla>