HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/share/jed/lib/mime.sl
% Parse buffer full of MIME noise
% Note:  This is very primitive and should be fixed

try
{
   require ("mimemisc");
}
catch AnyError;

private variable Mime_Base64_Decode = __get_reference ("mime_base64_decode");
private variable Mime_Iconv = __get_reference ("mime_iconv");

define mime_parse_this_qp ()
{
   variable str;

   str = strcat ("0x", char (what_char ()));
   del ();
   str = strcat (str, char (what_char ()));
   del ();
   if (Integer_Type == _slang_guess_type (str))
     {
	insert_char (integer(str));
	return;
     }
   insert (str);
}

define mime_rfc1522_parse_buffer ()
{
   variable qpre;
   variable len;
   variable charset, encoding, str, encoded_string;

   % Look for things like =?iso-8859-1?Q?=E1end?=
   qpre = "=\\?\\([-_a-zA-Z0-9]+\\)\\?\\([QBqb]\\)\\?\\([^ \t]+\\)\\?=";

   push_spot ();
   bob ();
   while (len = re_fsearch (qpre), len)
     {
	len--;
	charset = regexp_nth_match (1);
	encoding = regexp_nth_match (2);
	str = regexp_nth_match (3);
	push_mark ();
	go_right (len);

	if (strup(encoding) == "B")
	  {
	     if (Mime_Base64_Decode == NULL)
	       continue;

	     encoded_string = bufsubstr_delete ();
	     variable e;
	     try (e)
	       {
		  str = (@Mime_Base64_Decode)(str);
	       }
	     catch AnyError:
	       {
		  vmessage ("Error [%S] encountered decoding mime: %S", e.descr, e.message);
	       }
	  }
	else
	  {
	     encoded_string = bufsubstr_delete ();
	     push_mark ();
	     insert (str);
	     narrow_to_region ();

	     bob ();
	     replace ("_", " ");
	     while (fsearch ("="))
	       {
		  del ();
		  mime_parse_this_qp ();
	       }
	     eob ();
	     mark_buffer ();
	     str = bufsubstr_delete ();
	     widen_region ();
	  }
	if ((Mime_Iconv != NULL) && _slang_utf8_ok)
	  str = (@Mime_Iconv)("UTF-8", charset, str);

	insert (str);
     }
   pop_spot ();
}

define mime_qp_parse_buffer ()
{
   bob ();
   while (fsearch ("="))
     {
	del ();
	if (eolp ())
	  {
	     del ();
	     continue;
	  }

	mime_parse_this_qp ();
     }
}