0

This is a weird one. I'm administering a FreePBX server using their standard CentOS 7 based distribution running in a virtual machine.

Every so often (usually a few months in between occurrences), the dashboard or User Control Panel (UCP) will stop working. If you check the browser console you will see strange JS errors. If you click on the file that's throwing the error, you see it going along fine until maybe half way through, and then there's a section of completely garbled text (example below).

The strange part is that when I check the file on the server, it's totally normal (no garbled text). So, somehow, during transmission, the file is messed up between the server's disk and the client's browser. I can even curl the file locally from the server and it's served properly.

I have tried restarting httpd (apache2) and the UCP service with no effect. I have tried multiple browsers and completely disabling caching, so it's not a client side cache issue. The only solution I have found is a complete reboot of the FreePBX server.

Unfortunately, I can't predict when it will happen again, so I can't test theories in real time. But, if you have any suggestions, I'll save a link to this question and check it the next time it happens.

What the problem looks like:

...
        if (isCanvasSupported) {
            this._eventManager.ghostCtx.beginPath();
            this._eventManager.ghostCtx.rect(plotArea.x1, plotArea.y1, plotArea.width, plotArea.height);
            this._eventManager.ghostCtx.clip();
        }

        for (var j = 0; j < plotUnit.dataSeriesIndexesR¡ÑÀà~àxñÀ…àÊ †��U0FüÏs€�Ĺ{1£R£ÑÀà~ñÀf
üv�Ýð²Ïÿå?
mx� €�ij‘Á¸íQ€‰áÏp��0ÕOü/(N ©pî
 ��Ù&N÷îüñÀ
/ü�Û(wFïÿHuvï%†Ahpðå¦Y&—J$@�Ép¯ü
¹—‹¸·ˆpí&†
@¦¦Ø-üàxñÀáÅ¢`�uÏq€�ø­ "Œ!à òxqÊ ¡�ÄáÿÊ!A
üàx     s��Ú3zÏq€�t³¸xa€ƒ8`à•x@ lÁ¸à�£àxÏr€�l­ð"�ê# ��Û
ðRhUzÇr€�t³"Ì�A„ã:bA¤íà~ñÀ6 /ü¸rw(u�Þ
'€€�Ĺ4�ðFý~Èqé��÷A(PuÿÜÌ%“óõ#‘Á¹Ù  €Ïp��10‘Oü8�ð
ýÈqé��ùA(PuÿÜÌ%“òõ#‘Á¹Ý P€Ïp��20UOüL%�€Ì&"ØâÿÀxüàxñÀšüuºïü(v€æÌ "€¸âÿÊ Bé�ü¸Çp€�Ì" C àd ñÀÏp€�ø­!€@€  A €áÊ ��<0ôAü&" é‘�Ïp��60ÝOüÏs �� ƒ!!�
S�;ƒážààÏÑÀà~ñÀáÅÏq€�ø­Au‚Ð���€�¢–Ïÿº¯ü©pe�üñÀæÏûáÀÏv€�ø­¡†w"…Š Ã/qÊ B
"�Ê!Â��J
 �épÂ
 ��Àú¯ü‹pƒè©peðÏp �� €�ÙñpÊ!o�€áÊ Á ¦Ïp€�œ�€€à��Á@&�¶
 ©r…q�f��!…$xqÊ ‚��N0Bü> �…Œ ÿÊ ��z0ð�Aü¸Cp…nïÿ�Ù&…!yÂy#¥'…¥‘á¸Ê ��_0À�Aü�èÏp��`0±�Oü…èð(p €ÿéá€@%�çéqbïü�Úè†"€;    �„Aïû¡À©p*   �éq“ñàxÏr€�ø­�Ûðk@ V"Á™aX`> †ã ¹†D�Ïã±÷�ÙÏp€�ø²: Ïs€�8³“ÿÜ ¸³V"Ãc¢Ïp€�`³¢@"��¢U"@¢b¢(s ðkxX`Ž 2 3 4 ã󔀆¢‡¢*¢eààÏàxñÀ¯ÿ
Ø
Øj  ïÿ�ÙÑÀà~ñÀ2ÏûpÏv€�ø­�†Ý&€â€éG‘
�B† �H€ê! àzïü©rÏp€�Ì'  �†J �
qÿÞ¾
¯ÿ
Øïÿ
p"€!    €AÏr �� [‚€–"�z€âÊ%)    Ïp€�Ĺ
€äèïû©pñÀ¶
Ïû
%�(vÊ ��A0DüÏp€�ø­€è�€èÏp��C0-ü…è
Ïü�Ø¥¥…è
ïüÉq�Ø¥ÿØÕïû¥Ïr€�ø­è"€&¢�€ðÿØ¢�Ø¢Ïp �� €¢à  ¢àxñÀáÅÏq€�ø­£€åÊ ��:0Èü�…¡©pªïýÙ•€¸µ�Ø�¥}ïû©pàxñÀèÏr€�ø­d‚ë ƒéÏp��80ü�£¢ð ¹'°¢�€
è'÷ €Ïp��J0müÑÀà~ñÀ¾ÏûÿÞ�ÝÉwðå¯}9
ž �©pð©v @�uè/*�N"„)Ïr€�)0"Bã
P‡âÊ'AîññvÊ ‚��ÿ�Ì&Ì'ò0Ù¾Ô~Ïp€�̹f ¦XÙ¿ôø`  ±ÏûàxñÀ¦    ü¢ÿÑÀà~àx¸Çp€�Ì' �Ù% à& àx C�R�
”�ð@*ƒya0púÏÿà(pàxñÀy"‚�+
Q�c€ëB€
»zb–"�"z?ºR"€Ê ��'0xü" $ð\ˆE
’�b€    ðE€
º[cb ðù“!Â�
R�÷„ð���byA)ÀR �€ò  „���Ïp��$0-üÑÀà~ñÀ~Ïû�ÝÏp€�Ĺ-€©w
ð‘¸x� Ž€�ȳ
ïü©p †é)€�wÀ}Ê'$€�Ò�‘žíæñ€åÊ%A(vìñ‘ÏûñÀ&ÏûÏq �� Û�Ù B�Y ?”] žÏq€�Ĺ­ð$€&¥ …$í3•ý    ƒf…@€õ€d…B€zbD¥”!c•å€
¿h…
»[câ{Â{ R�âzD¥OÁ
ƒ¬¹3µÞñ €(¹/y áÊ †��f0Hü”žª¸´Ïr€�œ�‚a¸�¢Ïp€�ø¹Ž
ÏüåÏûñÀÏq€�Ĺmð`ƒ7ë3“ý  ƒ#“     Dƒ �    R�Ïq€�'IR"�ºYaDê�Ù
ðÏp��k0ÙüC‚"Eƒ„ƒ
º\dHƒ
ºšbYaÇq���q ÏÿÏp��c0­üÑÀà~àxñÀò ïûÙªÁ:pJ � ~    ïý‹p…Àv ïýÙ
rð5jÇq€�ÌQ�ejq|ôƒp` &% âß
Ïp€�Ĺ̀
u"ð–?^–ìŽÞ«¸¶ Ð#op ƒé€è5oÇq€�ÌeF@&�zb’¯ü*q%ÍÀ†àî
  @#ð/(AN ‚Hp"
ïÿÙ%öíïûªÀñÀ:   Ïû�Ý
 €/€�ij©sð@+!���ÿTkTz� € # ,B0â@ !Ya! )k$°ãÙˆ„/��ÿÿÏp€�Ä»uXƒÏw€�Ĺ�Þ    ð2n4yo8`nïýÙæó‘­§®§@ �!§B'�ïû§àxñÀ�ÙÏt€�ø­„(rð`€qhpè'âõ €Ïp��x09ü„qPÜÌ"ƒÊ ‚��y0 üÑÀà~ñÀrÏûtÏu€�Ì@%ð/*N"ƒo{Ukºbæ‚$Ì?gæ¢ôì/(�N ¹ fxŒ €È÷º��€àÐ
aÿÊ ¡‰�ÏûÏq€�à¸xà�aàxñÀ„àÊ †��‚0¨üÏq€�ܸx�aÑÀà~ñÀî¯ûJ%��¨uðJ%@�åU
ž    �©p˜pÿØøpï�Š }Ïv€�)Øp0&@Š ×ámÏU‘n   �épÀ/¾0&A @Ì ×õçðñÆ     ¨péûàxÏp€�´€‚àØà �àx2h4y�!€€�Øà~àxñÀq�Ø…áÊ †��0ì�üsðÏt€�ÜRkTzDd�Ú"B�„z€âÊ ãpèÑÀà~àxáÅ�ÜÏq€�´@!    @!ðŠ ÿ!
�¥äõT‘�ÜðŠ ÿ#
�¥äõ‘�Û ðŠ$ÿkxX`€ ãõØ¡ÚH¡R¡Ø¡T¡àÁÅàxz
5�ÙºTzÏs€�ØBc   €�(pðØà~ñÀx…àÊ †��0,�ü‚ýÑÀà~àxñÀqŠ ÿ…áÊ †��0�ü�ÜðRlTzÇr€�´j‚    N�‚ä
Œ ÿóóÑÀà~ñÀ…àÊ †��a�ÔæûÀ(æ&ýxÑÀà~àxñÀx„àÊ †��   0´ÆûÞÏýÑÀà~àxñÀ„àÊ †��0˜ÆûÂÏýxÑÀà~àxáÅ�ÚÏs€�´U£Hqðá?    ixx`‰€Œ$ÿŸøó
€vè/,N$„-Ït€�)0$L
âU£�Ø @íñàÁÅàxñÀáÅÏu€�|­ìH³Ïp€�¤­AÀÏp€�lBÀÏp€�tCÀØDÀ�ØÙÚÛ
$€€�|
%€€�PJ&€Ž øpÏq��À¶à©p�Øroýq¥¯û¥Ààxà~àxà~àxà~àxÙÏp ��= à~Ïp��­Þà~Ïq€�Dsà¡+ÈÇp€�g ˆá ¨�ˆR�Š �Ï°ŠØ¸ðŠ �Ï°Bؘ¸à~ñÀØ
    à�ÙØÏq �€¡ €�øÿÿ¡Ïp€�0iˆÏq ��(‚àØÀx¸ƒ¸¸… ’�¡    ïûØÑÀà~àxñÀ~û„(�!€€��)(��!€��*@!@!@!    Q&À€Š"�Ê"!�B„��ÝðÏw€�”¯gÉ€ëcd~tÄ{/+Á�N#ŽËdpªåW
é€Ïs€�ŒªcÏt€�$’D/*ÁN"ŽÎd�$BÀªÕä~/.N&îdȪ«Þ€h€†åÓ#¦�/+Á�N#ŒÏs€�À‹cÕñ�Ýði€ém€åÊ'AîfÄ{ÔÄ{/+Á�N#ŽËdpªå]
•I€Ïv€�¨«fÏt€�$’dz/+�N#ëd�'O`¯udz/*�N"ƒkd@$ºbfª§Þ€h€€åÓ#¡�/+Á�N#ŒÏs€�À‹cÓñ�Ûð(€Ïr€�¼jb�%Ì�Dy/)A�N!‚Ïq€�ÀIa㠬݉ûñÀ"û¶ÀÊàuÏq€�ØHí€àØ!áÙ!b    ð€àØ!aÌ b€Õ!bÏp€�Ø@�€MžÏp¥��d€@ÚD �ÜðaÏr¦��€•z ¢äÒä¹÷R‚�S�—i…yÏt¤��@E¤&¤d Ïq€�x[
‰à
©   ûñÀ’
û
 €/€�eturn animationInfo;
    }

    Chart.prototype.renderArea = function (plotUnit) {
        var ctx = plotUnit.targetCanvasCtx || this.plotArea.ctx;

        var totalDataSeries = plotUnit.dataSeriesIndexes.length;

        if (totalDataSeries <= 0)
            return;

        var ghostCtx = this._eventManager.ghostCtx;

        var axisXProps = plotUnit.axisX.lineCoordinates;
        var axisYProps = plotUnit.axisY.lineCoordinates;
        var markers = [];
        var markerPropsColor = null;

        var plotArea = this.plotArea;
        var previousNotNullDataPoint, currentDataPoint;
        ctx.save();
...

Update

It happened again today. This time, there was a bit of readable text sprinkled throughout the garbled section:

this.require.v�������00o’âU��@-Ö����������������������������������������������������������¨\%�����X��������������������ˆ‰’âU�����������������/usr/lib64/php/modules/soap.so��1�������/usr/lib64/php/modules�soap.so����������¡��������‰’âU��€9o’âU�� ll’âU��ÀUn’âU���à°å��ð4p’âU��ù°å��Èä°å��˜ù±å�����������‰’âU��€9o’âU�� ll’âU��ÀUn’âU���à°å��Èä°å��ð4p’âU��˜ù±å��ù°å��á�������������������������������������������������������£jŽÊ��à‹L����jŽÊ��fjŽÊ��ui ����AjŽÊ��•jŽÊ��°Êô����jŽÊ��‡jŽÊ��·Çô����jŽÊ��}jŽÊ��ii
����AjŽÊ��fjŽÊ��ui  ����,jŽÊ��rjŽÊ��”‘–����AjŽÊ��a��������������00o’âU��������������������������������������������������������������������������‘�������²å��¨7p’âU��8Av’âU��¨-|’âU��è2o’âU��8§ƒ’âU��˜‰’âU��¸‰’âU��½‰’âU��¨ó‰’âU��ü‰’âU��¨;Š’âU������������������������������������������a�������8‹^1����������°‰’âU���������� ‰’âU��Љ’âU������������������˜‰’âU��soap������������±�������¨���š-3������������������������c“Ê��ଳÊ��`OÊ��`¿ŽÊ��оŽÊ���������� ÉŽÊ���������������������������������������������������������‰’âU��/�������h“Ê�����������[���w“Ê�������������������������������� ³Ê��ðÉŽÊ��°‰’âU����������|�������@k’âU��m4iÜÙy1@ëšgý�� ���������������h†”Ö��`W=ä��¨�������8‹^1���¨�������P‰’âU��€–Ö��¬A   ä��Àêšgý��p¥å��8�������CVÖ��/\äÔ¨����������@ëšgý��Q�������nÝÔÚÜp�B�������°‰’âU����������0‰’âU��`=v’âU��àÝ…’âU����������èþ\Ä�����������[���Ž“Ê�������������������������������àœ³Ê��`ÊŽÊ��°‰’âU����������|�������@k’âU��m4iÜÙy1@ëšgý�� ���������������h†”Ö��`W=ä��¨�������8‹^1���¨�������P‰’âU��€–Ö��¬A   ä��Àêšgý��p¥å��8�������CVÖ��/\äÔ¨����������@ëšgý��1�������/usr/lib64/php/modules/sockets.so�������Á�������àlÊ��°‰’âU��ð-ŽÊ��G‰’âU���‰’âU��à‰’âU����������P‰’âU����������ð-ŽÊ��Ð.ŽÊ��À.ŽÊ����������€.ŽÊ��.ŽÊ���/ŽÊ��/ŽÊ�� /ŽÊ�� .ŽÊ��°.ŽÊ��.ŽÊ�� .ŽÊ���.ŽÊ������������������������������������������à.ŽÊ������������������ð.ŽÊ����������0.ŽÊ��P.ŽÊ��@.ŽÊ��`.ŽÊ������������������������������������������@/ŽÊ��0/ŽÊ����������������������������������`/ŽÊ������������������������������������������������������������������P/ŽÊ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p.ŽÊ��@àlÊ�� mÊ��������ð‰’âU���������H‰’âU������������������‰’âU����������������âlÊ��âlÊ��LàlÊ�����@�������������������������ÎôlÊ�� ‰’âU���àlÊ��À4ŽÊ���nÊ��˜‰’âU��²å�������������������������8‰’âU��˜‰’âU�����������ý������[¨��������������������Љ’âU��À‰’âU��
����������������������������������������������ÈìlÊ���������Èä°å��p1ä����������������������������������������������������������ˆ5!�����x��������������������h‰’âU�����������������/usr/lib64/php/modules/sockets.so���������������1�������/usr/lib64/php/modules�sockets.so�������A�������à‰’âU��Èä°å��˜ù±å����������à‰’âU��Èä°å��˜ù±å��±�������������������������������������������������������ÂôlÊ��ui ����nôlÊ��¸ôlÊ��ii
����nôlÊ��­ôlÊ��•‘–����nôlÊ��¡ôlÊ��ti   ����nôlÊ��–ôlÊ��”‘–����nôlÊ��a��������������00o’âU��������������������������������������������������������������������������a�������•~ìŠç��������€‰’âU����������@M‰’âU��P‰’âU������������������h‰’âU��sockets���������±�������¨���š-3������������������������¢ÖmÊ��À'ŽÊ��!mÊ��€!mÊ����������@!mÊ��!mÊ�����������������°4ŽÊ���!mÊ������������������������à‰’âU��0�������ªÖmÊ��Q�������­,U‡¦m¾�������€‰’âU����������€‰’âU��`‰’âU������������������@ÿ\Ä�����������[���ºÖmÊ�������������������������������€"ŽÊ��@;mÊ��€‰’âU����������|�������@k’âU��m4iÜÙy1@ëšgý�� ���������������h†”Ö��`W=ä��¨�������•~ìŠç�¨������� ‰’âU��€–Ö��¬A  ä��Àêšgý��p¥å���������CVÖ��/\äÔ¨����������@ëšgý��Q�������!½Z£‚¦m¾�������Љ’âU����������Ð ‰’âU��0‰’âU��@~ƒ’âU����������˜ÿ\Ä�����������[���ÈÖmÊ�������������������������������"),d.setAttribute("id",this.internal.flash.id),d.setAttribute("name",this.internal.flash.id),d.setAttribute("data",this.internal.flash.swf),d.setAttribute("type","application/x-shockwave-flash"),

Another corruptions showed up this same day, and this one looks like PHP array syntax.

Code that looks like this is found in several copies of the same PHP file spread throughout the FreePBX codebase. They are all from libphonenumber-for-php. An example path is: /var/www/html/admin/modules/vqplus/vendor/giggsey/libphonenumber-for-php/src/geocoding/data/zh/86155.php

function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),l=Math.min(s,n,o),h=r-l,c=r+l,u=.5*c;return e=l===r?0:s===r?60*(n-o)/h+360:n===r?60*(o-s)/h+120:60*(s-n)/h+240,i=0===h?0:.5>=u?h/c:h/(2-c),[Math.round(e)%360,i,u,null==a?1:a]
},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,nu  861552657 => 'å‰æž—çœå‰æž—市',
  861552658 => 'å‰æž—çœå››å¹³å¸‚',
  861552659 => 'å‰æž—çœå››å¹³å¸‚',
  861552660 => 'å‰æž—çœé€šåŒ–市',
  861552661 => 'å‰æž—çœé€šåŒ–市',
  861552662 => 'å‰æž—çœé€šåŒ–市',
  861552663 => 'å‰æž—çœé•¿æ˜¥å¸‚',
  861552664 => 'å‰æž—çœé•¿æ˜¥å¸‚',
  861552665 => 'å‰æž—çœé•¿æ˜¥å¸‚',
  861552666 => 'å‰æž—çœé•¿æ˜¥å¸‚',
  861552667 => 'å‰æž—çœé•¿æ˜¥å¸‚',
  861552668 => 'å‰æž—çœç™½åŸŽå¸‚',
  861552669 => 'å‰æž—çœç™½åŸŽå¸‚',
  86155267 => 'å‰æž—çœå»¶è¾¹æœé²œæ—自治州',
  86155268 => 'å‰æž—çœé•¿æ˜¥å¸‚',
  861552690 => 'å‰æž—çœè¾½æºå¸‚',
  861552691 => 'å‰æž—çœè¾½æºå¸‚',
  861552692 => 'å‰æž—çœç™½å±±å¸‚',
  861552693 => 'å‰æž—çœç™½å±±å¸‚',
  861552694 => 'å‰æž—çœç™½åŸŽå¸‚',
  861552695 => 'å‰æž—çœç™½åŸŽå¸‚',
  861552696 => 'å‰æž—çœç™½å±±å¸‚',
  861552697 => 'å‰æž—çœæ¾åŽŸå¸‚',
  861552698 => 'å‰æž—çœæ¾åŽŸå¸‚',
  861552699 => 'å‰æž—çœæ¾åŽŸå¸‚',
  8615527 => '湖北çœæ­¦æ±‰å¸‚',
  86155280 => 'å››å·çœæˆéƒ½å¸‚',
  86155281 => 'å››å·çœæˆéƒ½å¸‚',
  86155282 => 'å››å·çœæˆéƒ½å¸‚',
  86155283 => 'å››å·çœæˆéƒ½å¸‚',
  86155284 => 'å››å·çœæˆéƒ½å¸‚',
  86155285 => 'å››å·çœç»µé˜³å¸‚',
  861552860 => 'å››å·çœå—充市',
  861552861 => 'å››å·çœå—充市',
  861552862 => 'å››å·çœé›…安市',
  861552863 => 'å››å·çœé›…安市',
  861552864 => 'å››å·çœé›…安市',
  861552865 => 'å››å·çœé›…安市',
  861552866 => 'å››å·çœå·´ä¸­å¸‚',
  861552867 => 'å››å·çœå·´ä¸­å¸‚',
  861552868 => 'å››å·çœèµ„阳市',
  861552869 => 'å››å·çœèµ„阳市',
  861552870 => 'å››å·çœå®œå®¾å¸‚',
  861552871 => 'å››å·çœå®œå®¾å¸‚',
  861552872 => 'å››å·çœå®œå®¾å¸‚',
  861552873 => 'å››å·çœå®œå®¾å¸‚',
  861552874 => 'å››å·çœå®œå®¾å¸‚',
  861552875 => 'å››å·çœä¹å±±å¸‚',
  861552876 => 'å››å·çœä¹å±±å¸‚',
  861552877 => 'å››å·çœä¹å±±å¸‚',
  861552878 => 'å››å·çœä¹å±±å¸‚',
  861552879 => 'å››å·çœæˆéƒ½å¸‚',
  861552880 => 'å››å·çœå—充市',
  861552881 => 'å››å·çœå—充市',
  861552882 => 'å››å·çœå—充市',
  861552883 => 'å››å·çœå—充市',
  861552884 => 'å››å·çœå—充市',
  861552885 => 'å››å·çœå—充市',
  861552886 => 'å››å·çœèµ„阳市',
  861552887 => 'å››å·çœè¾¾å·žå¸‚',
  861552888 => 'å››å·çœè¾¾å·žå¸‚',
  861552889 => 'å››å·çœç”˜å­œè—æ—自治州',
  861552890 => 'å››å·çœé›…安市',
  861552891 => 'å››å·çœé›…安市',
  861552892 => 'å››å·çœå·´ä¸­å¸‚',
  861552893 => 'å››å·çœå·´ä¸­å¸‚',
  861552894 => 'å››å·çœå·´ä¸­å¸‚',
  861552895 => 'å››å·çœå®œå®¾å¸‚',
  861552896 => 'å››å·çœå®œå®¾å¸‚',
  861552897 => 'å››å·çœå®œå®¾å¸‚',
  861552898 => 'å››å·çœå®œå®¾å¸‚',
  861552899 => 'å››å·çœå®œå®¾å¸‚',
  86155290 => '陕西çœè¥¿å®‰å¸‚',
  861552910 => '陕西çœå’¸é˜³å¸‚',
  861552911 => '陕西çœå»¶å®‰å¸‚',
  861552912 => '陕西çœæ¦†æž—市',
  861552913 => '陕西çœæ¸­å—市',
  861552914 => '陕西çœå•†æ´›å¸‚',
  861552915 => '陕西çœå®‰åº·å¸‚',
  861552916 => '陕西çœæ±‰ä¸­å¸‚',
  861552917 => '陕西çœå®é¸¡å¸‚',
  861552918 => '陕西çœå®é¸¡å¸‚',
  861552919 => '陕西çœé“œå·å¸‚',
  86155292 => '陕西çœè¥¿å®‰å¸‚',
  86155293 => '陕西çœè¥¿å®‰å¸‚',
  86155294 => '陕西çœè¥¿å®‰å¸‚',
  86155295 => '陕西çœè¥¿å®‰å¸‚',
  86155296 => '陕西çœè¥¿å®‰å¸‚',
  86155297 => '陕西çœæ¦†æž—市',
  86155298 => '陕西çœæ¦†æž—市',
  86155299 => '陕西çœæ¦†æž—市',
  86155300 => '河北çœé‚¯éƒ¸å¸‚',
  86155301 => '河北çœçŸ³å®¶åº„市',
  86155302 => '河北çœä¿å®šå¸‚',
  861553030 => '河北çœå¼ 家å£å¸‚',
  861553031 => '河北çœå¼ 家å£å¸‚',
  861553032 => '河北çœå¼ 家å£å¸‚',
  861553033 => '河北çœå¼ 家å£å¸‚',
  861553034 => '河北çœå¼ 家å£å¸‚',
  861553035 => '河北çœå”山市',
  861553036 => '河北çœå¼ 家å£å¸‚',
  861553037 => '河北çœå¼ 家å£å¸‚',
  861553038 => '河北çœå¼ 家å£å¸‚',
  861553039 => '河北çœå¼ 家å£å¸‚',
  86155304 => '河北çœæ²§å·žå¸‚',
  86155305 => '河北çœå”山市',
  86155306 => '河北çœå»ŠåŠå¸‚',
  86155307 => '河北çœæ²§å·žå¸‚',
  86155308 => '河北çœå”山市',
  86155309 => '河北çœé‚¢å°å¸‚lass:function(e,i,s,n,o){return t.effects.animateClass.call(

This is interesting clue. It makes me think that somehow this JS file is being processed by PHP and PHP is misbehaving and printing some of its configuration. Any ideas on what I should look into next?

Update 2

Sorry for posting so many updates, but this is an interesting turn of events. I tried reinstalling the ucp module using: fwconsole ma downloadinstall ucp

After I did that, I got a new corruption, this time with python code being injected into the file. It looks like that code has to do with yum in someway. My new theory is that somehow random chunks of whatever is in recent server memory are being injected into the files.

This is really alarming and makes me think this might be some kind of security breach.

New snippet:

e=f.data[c],g=e[d];l.apply(this,[a,g,e,c])})})}}),this.updateSelected(),this.resetView(),this.trigger("post-body",i)},p.prototype.initServer=function(b,c,d){var e,f=this,g={},i={searchText:this.searchText,sortName:this.options.sortName,sortOrder:this.options.sortOrder};this.options.pagination&&(i.pageSize=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize,i.pageNumber=this.options.pageNumber),(d||this.options.url||th= head
            parent = None
            q = self.import_it(head, qname, parent)
            if q: return q, tail
        raise ImportError, "No module named '%s'" % qname

    def load_tail(self, q, tail):
        m = q
        while tail:
            i = tail.find('.')
            if i < 0: i = len(tail)
            head, tail = tail[:i], tail[i+1:]
            mname = "%s.%s" % (m.__name__, head)
            m = self.import_it(head, mname, m)
            if not m:
                raise ImportError, "No module named '%s'" % mname
        return m

    def ensure_fromlist(self, m, fromlist, recursive=0):
        for sub in fromlist:
            if sub == "*":
                if not recursive:
                    try:
                        all = m.__all__
                    except AttributeError:
                        pass
                    else:
                        self.ensure_fromlist(m, all, 1)
                continue
            if sub != "*" and not hasattr(m, sub):
                subname = "%s.%s" % (m.__name__, sub)
                submod = self.import_it(sub, subname, m)
                if not submod:
                    raise ImportError, "No module named '%s'" % subname

    def import_it(self, partname, fqname, parent, force_load=0):
        if not partname:
            # completely empty module name should only happen in
            # 'from . import' or __import__("")
            return parent
        if not force_load:
            try:
                return self.modules[fqname]
            except KeyError:
                pass
        try:
            path = parent and parent.__path__
        except AttributeError:
            return None
        partname = str(partname)
        stuff = self.loader.find_module(partname, path)
        if not stuff:
            return None
        fqname = str(fqname)
        m = self.loader.load_module(fqname, stuff)
        if parent:
            setattr(parent, partname, m)
        return m

    def reload(self, module):
        name = str(module.__name__)
        if '.' not in name:
            return self.import_it(name, name, None, force_load=1)
        i = name.rfind('.')
        pname = name[:i]
        parent = self.modules[pname]
        return self.import_it(name[i+1:], name, parent, force_load=1)


default_importer = None
current_importer = None

def install(importer = None):
    global current_importer
    current_importer = importer or default_importer or ModuleImporter()
    current_importer.install()

def uninstall():
    global current_importer
    current_importer.uninstall()
������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������eld="%s"]',l[e]));
  • Make sure the hypervisor is up to date. Check for defective hardware, then filesystem corruption after you have replaced anything and have known-good hardware and the hypervisor is fully patched. This doesn't look like a compromise. – Michael Hampton Jul 3 at 22:59
  • Thanks for the comment @MichaelHampton. I update the hypervisor weekly (it's a plain CentoOS 7 box running libvirt), but I do think there's a kernel update waiting for a reboot. I'll do that tonight. Any tips on checking for filesystem corruption? It's not something I've really had to do before. The guests are run on qcow2 image files on top of an XFS formatted SSD on the hypervisor if that has any bearing. – Dominic P Jul 3 at 23:11
  • It will do no good (and possibly even more harm) to try to fix filesystem corruption if there is a hardware problem. Verify your hardware first. – Michael Hampton Jul 3 at 23:14
  • That makes sense. Does this seem like a hardware issue then? It's strange to me that it would just be affecting this one virtual machine, but I guess it could be affecting the others in ways that I can't detect. Unfortunately, my resources are a bit constrained and I don't have other hardware that I can easily test this on at the moment. – Dominic P Jul 5 at 20:40
  • There might be something else going on, but from my experience I would say a hardware problem is the most likely cause. I would check for defective RAM, first. Maybe a bad slot on the motherboard, or another problem with the motherboard. – Michael Hampton Jul 5 at 21:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.