<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-GB">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">I have a setup of OBS (SUSE Open Build Service) machines where I create OpenSUSE 12.3 RPM packages of mono 4.3 and GTK# 2.12.29. I’m using code downloaded from http://github.com/mono/mono at commit b6dfce621f70115cd16e75a743cbbdee5ac6610e.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">To make the code compile without complains from the OBS worker machine I had to apply this fix:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">--- mono/mcs/class/corlib/System/WindowsConsoleDriver.cs      2015-10-14 18:14:36.238365556 +0200<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">+++ mono/mcs/class/corlib/System/WindowsConsoleDriver.cs      2015-10-15 12:14:12.750179775 +0200<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">@@ -432,7 +432,7 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">                    Coord bsize = new Coord (sourceWidth, sourceHeight);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">                    Coord bpos = new Coord (0, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">                    SmallRect region = new SmallRect (sourceLeft, sourceTop, sourceLeft + sourceWidth - 1, sourceTop + sourceHeight - 1);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">-                    fixed (void *ptr = &buffer [0]) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">+                    fixed (CharInfo *ptr = &buffer [0]) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">                          if (!ReadConsoleOutput (outputHandle, ptr, bsize, bpos, ref region))<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">                                 throw new ArgumentException (String.Empty, "Cannot read from the specified coordinates.");<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">                    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">I also had to apply this change in order to avoid an unallowed warning message:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:black">I: Statement might be overflowing a buffer in strncat. Common mistake:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:black">   BAD: strncat(buffer,charptr,sizeof(buffer)) is wrong, it takes the<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:black">   left over size as 3rd argument<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:black">   GOOD: strncat(buffer,charptr,sizeof(buffer)-strlen(buffer)-1)<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span lang="EN-GB">(bufferoverflowstrncat)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="ES" style="font-size:10.0pt;font-family:Consolas">--- mono/mono/metadata/process.c  2015-10-14 18:21:22.283225690 +0200<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="ES" style="font-size:10.0pt;font-family:Consolas">+++ mono/mono/metadata/process.c  2015-10-20 11:42:45.094099600 +0200<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">@@ -383,7 +383,7 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">      char filename [80] = "[In Memory] ";<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">      const char *modulename = assembly->aname.name;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">-      strncat (filename, modulename, 80);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">+      strncat (filename, modulename, 80 - strlen(filename) - 1);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">       /* Build a System.Diagnostics.ProcessModule with the data.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10.0pt;font-family:Consolas">       */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">First of all, does this last change make sense? I’d say so -since it’s the expected strncat usage- but I’m not completely sure.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">At this point I’m able to build mono RPM packages and they’re working as I install them using a test OpenSUSE 12.3 virtual machine. However, when the GTK# builds are started –which use the mono packages as build requirement–,
 the worker is unable to run the mono executable: apparently, malloc is corrupting the heap or something. This is a sample execution as extracted from the OBS build logs:<o:p></o:p></span></p>
<div style="mso-element:para-border-div;border:dotted #669900 1.0pt;padding:2.0pt 2.0pt 2.0pt 2.0pt;background:#F6F6F6;margin-left:7.5pt;margin-right:7.5pt">
<pre style="line-height:11.7pt;background:#F6F6F6;border:none;padding:0cm"><span style="font-size:8.0pt;color:#333333">[  101s] + /opt/plasticscm5/mono/bin/mono /opt/plasticscm5/mono/lib/mono/4.5/gacutil.exe -l<o:p></o:p></span></pre>
<pre style="line-height:11.7pt;background:#F6F6F6;border:none;padding:0cm"><span style="font-size:8.0pt;color:#333333">[  101s] *** Error in `/opt/plasticscm5/mono/bin/mono': malloc: top chunk is corrupt: 0x08ab9230 ***<o:p></o:p></span></pre>
</div>
<p class="MsoNormal">As you might guess, the --prefix value used to compile mono is
<span style="font-size:10.0pt;font-family:Consolas">/opt/plasticscm5/mono</span>) The
<span style="font-size:10.0pt;font-family:Consolas">MALLOC_CHECK_</span><span style="font-size:10.0pt">
</span>environment variable is set to 3 by default. If set to 1, a warning message is displayed and the execution continues, but the program ends incorrectly by a segmentation fault.<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">I’m totally clueless about what might be happening. I have OBS configured to build this exact packages on OpenSUSE 12.2 and (to my dismay) they are being built flawlessly.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">Could this be caused by my custom code changes? I don’t think that’s the cause since all of the remaining distros (Debian 6/8, Ubuntu 14.04, Red Hat 6, Fedora 17/20 and OpenSUSE 12.2) don’t reproduce the issue.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">I’d be delighted if someone could give me a hint about what might be going on. I’m also available to post any additional information that may be useful to find out the reason behind my mess.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">Thank you!<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">Miguel González<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
</div>
</body>
</html>