From dc1d1a3fcd0e6a9e4f1ba791e15765d68b09e6dc Mon Sep 17 00:00:00 2001
From: Michael Foster <savetheinternet@tinyboard.org>
Date: Wed, 31 Jul 2013 16:22:27 -0400
Subject: [PATCH 1/3] Issue #125

---
 inc/locale/pl_PL/LC_MESSAGES/tinyboard.mo | Bin 19790 -> 19840 bytes
 inc/locale/pl_PL/LC_MESSAGES/tinyboard.po |   2 +-
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/inc/locale/pl_PL/LC_MESSAGES/tinyboard.mo b/inc/locale/pl_PL/LC_MESSAGES/tinyboard.mo
index 2a31d64e2b739bc537600e64426544aa1e58a4fe..bc603e6776603e1b1c86a613577a3c9ddc23aad2 100644
GIT binary patch
delta 2375
zcmXZeeN5F=9LMo53dqC7f&@_!uk3=56&JW=aUU3&T@fmkEL&x32DN-j%q7$IW0f|g
z`o~%cZj7x5TFw=?CQ*)DXtib|bEqrlR&Kdgvc;Oqp5CAPJAb{-IluGpJ>PTAg;PCg
zUA<`^PGx!Tq?xU#Hd|z7lVP($EUqyt!&~qZT!q6Js5P63CvY*I!4Rg^nNhR~%)p17
zkKqjJZJ39fFdcVdDR$MFX9X1cXvoGv%)(DGfn%tJ(j#WmF^mczf&pBLIk?jKFlvEz
zR3IBL6Srb6?!ejj5+?Cr#522r!p}4)!mFsrGH>+*Do1^<#?*p1m-<S~#|@~!pT~N9
z*?AnBsQ-gEV)8aiZL|aDQQwWqOut7#5x<X$_%L3FN3amTK<)6n`+mvQf5i&g|3r<S
zzr+u)%vp`vaSXMA<)}<N;#}|ao~EEkwxUws={~%Gns_fNu-BZgqcYTkns6Akz$i|`
z?@{wiI4`0ybs2Tk*HD?7d3&m#XH69JVKvUdHq_2N*Zv01qCSAl_!%mt*>{+&#|SRM
zw@`Ou6gB=^ROT+BGBJtD?BA#(3lPN&?w=J=(3zCtYOF`yg;!AndQky<fOBvZ@5l3~
ziL0Z&QPj93UXN=~nQBL6Xg4a82T&R6!(7(40Sb!fh#K&i>+m&d2dAAEQ2j2WF5@4l
z2`%Qoj!e9ZY7QzR_n|WK9ID?QRHk1+9c>?a+S%I_wD2$%;TY;{e{k(Tp(eV5<@hhE
zUnp)?f>CV6wKxwCp%(lSm4Q>J`F=yKH-*KRogn}EP?qp7Nfj!PD5^b)+VQ=p)UQPi
z>_7$7jmkt1s^5Fgk5HK#ah^cUJC4f0kElyOnIQj)=qe5Rfyry|7tY6JT<2oc*{y5z
z&#VJ=#ye39?nRB?kGd-ZsGT20ZQvMc;W5`fjyF@Ez?(3`yVKuEE%KDD5i4;A^4nqk
zs2xwBGBAlsea=$9z7S_qkD^lFih3PeP=WWj`eD?(=Wsqw<DzIDFGxW<S%N%GYeZg{
zbt3o622p4HJE~vqGXL@vVu<=&j9>$n;j=g$-^9h(i#m#vsCm9~UO_VES>SFzk`mN{
zb*P<eK@I3erF;OD%8yZJc-(o$wf};dv`?XSb`6!{f+TZd18UqhRDgT1Nbi3ig=!l5
zQK=kHec+kl8tS&(pXdS956g>KiU)839!36e+F8{2>?Sk*VA?{|5wxO?@JZL+g}O6?
zSj75vl7b?<fcmK{SmCEKgvvk?bvK^Cr?3}enBMH);znl^DnqL<3m-*gq}{b|a`jHk
zp}h+|{Ze&PNXLWDe$1f$F6x;ba`h3^z|T<=f8*LuyZSlQCB5kU3-u~ywfO%Zgizxi
zL><w(7HhXE3fpN=s`^k14`D72JI7GZW*n9B|4{uF+~ZGFjtVq}3ZNPDunhyaZRo4~
zv!yL{(cm*1w|6|gF<!Yj9<K>D1jE7l;O6q0a3WqCtf)v8WATWJm1+*hYQn)?yHf4y
S6Ru)R4P$DnhDO5sOa2E15E6j^

delta 2325
zcmXZde@vBC9LMo5D8dDas4j%!MGYYZr*f|);YH9cw<~%xz$w)~=2CDnnk6mg_K<5b
z%aQA9Yo;S}q$}rAHl3Dix#prD)XWW{wp=yWD$}7`|3vHk;W-=Qb<TO7bI$jC&pFTS
zem8CSaN5Urv%DA6%vLWlD>t*j#b!agfphU+yoe=B%r4*<-h&6L%qs9Wmg2X_pWWqO
z29}3?7h)#$Fy>+nPQ?U<Fc~(_?xWB_Ljb!m3tz`tOra*aic|1EQ~>D_v+0<R*%)%p
zM@<kx1yYUEa0TXI0~TTv#&KK3GrOO{SsE1K6;x!`PyyXRJ)gkI374A9pdP|}tVX@p
zh>ziV=K)Mm{|Xmi@DZC_XdTX^-i*pjr$<2%zl@4_H|F6U4B}g;6`pj@2VDIEmeKw>
zs{fy;0B<`dP%F-U)L%dWDiaHwOPt;^3W{U}D)n*qU>$1U4XD7Lbv}p6P#bE%9#n>U
zF&*DWjnnTujmp${)K(9nGWC=H+_S=E{)5?A#Dg$u<!fF0W_*Bp7dGM>sFaT2W=ya4
z5APP#+2}>}KZ?rS04fuMsLXze+Ojds<owxh6tpLQVH0K%p3cHEs1EI@0A9f&?8O#5
zi5hsq8L0951@T_mA3|j+g33@cDwA7L8S20s=C>{iifE4-aKC%u9n=brIZvV9JCEAy
z&rkynqi)AFd>luy9A_=}GZI6+*Mi!Dr%_wmfu2^jgMudR!2(R7_Vz>9eg>7=OE?d|
zM!h$V#TbaPIxNGPxC=Gm+o%j2L5=qbYQD?(AdW=IzaHGCL5JiYR3L#`ze5nU;$l?l
z%TOKbPyw}~GSP;5Z>Q5kWp1DIAZpw`R0cjm9s0pq@~?=l(4Z9lhzjUujB%WAp!Tk^
z-ruu2)Y(X&CftDPzX^3#x=<_MiyCJ?YT}e@@56=E`>_(g_b6y3w$h9%YkBxEHXz>)
z>qM=%AC-YYRO&}v{T3Ed53KT2KL>R?qNu>zTzxlc+!HtpzeA1V{Y^nD$>8L0B`puR
zSr$jmk#(c?_*2w-Kj2jS6-)7Vj9_le|IJv5Q>Z_W71)m2ibJSz-g90;GUnMB1x4})
zYQnSze<e{=hgMX|yHKfo4Yh{{oX1`JIh;oOWz={>s1#qvFy_Yne)XsTTd+X)e<OuO
zG<2d;**E!sYliEo52FSueZv2+JcS|ZTd@T9B0rS&0jmE9@<VC2P+Kr3;cwwmRC^M2
zX1cLJ_x}(DMR*Ez3$Ei_97km!xY|D(RoF(o9hc)(%*4D#-$GP|N-zs6P#KB1_8M1@
zV>azc^z@}_rJz0C=Iq1_>Mx-V=Pp;@hwAtyYT(1J{g|ttKpoQ4&M#26;uoyKaa6x~
zYy2&$Tw_~oJ`JmAP^vmm6TgZ%*yBv0u1y~*<=>#*yNTNCJE%aj*ZKhzq0USgr(^xV
pQ2uCWMk3h~i^rO3X1}m~=Z;O=qp^+anqtk(i6@f-Hy5Xh{|DN>1YiIF

diff --git a/inc/locale/pl_PL/LC_MESSAGES/tinyboard.po b/inc/locale/pl_PL/LC_MESSAGES/tinyboard.po
index ca4f7ea4..20802b7d 100644
--- a/inc/locale/pl_PL/LC_MESSAGES/tinyboard.po
+++ b/inc/locale/pl_PL/LC_MESSAGES/tinyboard.po
@@ -16,7 +16,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
 #. There is no previous page.
 #: /var/www/html/Tinyboard/inc/functions.php:958

From d692bce68674934a4af2e9cba79d65e72279b0a9 Mon Sep 17 00:00:00 2001
From: Michael Foster <savetheinternet@tinyboard.org>
Date: Wed, 31 Jul 2013 16:34:50 -0400
Subject: [PATCH 2/3] Fix issue #74. Note: This bug may break the display of
 certain filenames prior to upgrade.

---
 post.php                  | 6 +++---
 templates/post_reply.html | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/post.php b/post.php
index a82b56ad..8820db2d 100644
--- a/post.php
+++ b/post.php
@@ -284,7 +284,7 @@ if (isset($_POST['delete'])) {
 	$post['has_file'] = !isset($post['embed']) && (($post['op'] && !isset($post['no_longer_require_an_image_for_op']) && $config['force_image_op']) || (isset($_FILES['file']) && $_FILES['file']['tmp_name'] != ''));
 	
 	if ($post['has_file'])
-		$post['filename'] = utf8tohtml(get_magic_quotes_gpc() ? stripslashes($_FILES['file']['name']) : $_FILES['file']['name']);
+		$post['filename'] = urldecode(get_magic_quotes_gpc() ? stripslashes($_FILES['file']['name']) : $_FILES['file']['name']);
 	
 	if (!($post['has_file'] || isset($post['embed'])) || (($post['op'] && $config['force_body_op']) || (!$post['op'] && $config['force_body']))) {
 		$stripped_whitespace = preg_replace('/[\s]/u', '', $post['body']);
@@ -347,7 +347,7 @@ if (isset($_POST['delete'])) {
 	} else $noko = false;
 	
 	if ($post['has_file']) {
-		$post['extension'] = strtolower(substr($post['filename'], strrpos($post['filename'], '.') + 1));
+		$post['extension'] = strtolower(mb_substr($post['filename'], mb_strrpos($post['filename'], '.') + 1));
 		if (isset($config['filename_func']))
 			$post['file_id'] = $config['filename_func']($post);
 		else
@@ -414,7 +414,7 @@ if (isset($_POST['delete'])) {
 		$is_an_image = !in_array($post['extension'], $config['allowed_ext_files']);
 		
 		// Truncate filename if it is too long
-		$post['filename'] = substr($post['filename'], 0, $config['max_filename_len']);
+		$post['filename'] = mb_substr($post['filename'], 0, $config['max_filename_len']);
 		
 		$upload = $_FILES['file']['tmp_name'];
 		
diff --git a/templates/post_reply.html b/templates/post_reply.html
index bc96e74c..b0391f19 100644
--- a/templates/post_reply.html
+++ b/templates/post_reply.html
@@ -66,9 +66,9 @@
 			{% if config.show_filename and post.filename %}
 				, 
 				{% if post.filename|length > config.max_filename_display %}
-					<span class="postfilename" title="{{ post.filename|bidi_cleanup }}">{{ post.filename|truncate(config.max_filename_display)|bidi_cleanup }}</span>
+					<span class="postfilename" title="{{ post.filename|e|bidi_cleanup }}">{{ post.filename|truncate(config.max_filename_display)|bidi_cleanup }}</span>
 				{% else %}
-					<span class="postfilename">{{ post.filename|bidi_cleanup }}</span>
+					<span class="postfilename">{{ post.filename|e|bidi_cleanup }}</span>
 				{% endif %}
 			{% endif %}
 			{% if post.thumb != 'file' and config.image_identification %}

From 6cdf6038754f18af4509ecf078f51894f63c5853 Mon Sep 17 00:00:00 2001
From: Michael Foster <savetheinternet@tinyboard.org>
Date: Wed, 31 Jul 2013 16:38:09 -0400
Subject: [PATCH 3/3] Fix last commit; Make Tinyboard Twig extension more
 mb-safe

---
 inc/lib/Twig/Extensions/Extension/Tinyboard.php | 8 ++++----
 templates/post_thread.html                      | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/inc/lib/Twig/Extensions/Extension/Tinyboard.php b/inc/lib/Twig/Extensions/Extension/Tinyboard.php
index 61cf9fc9..58a98c40 100644
--- a/inc/lib/Twig/Extensions/Extension/Tinyboard.php
+++ b/inc/lib/Twig/Extensions/Extension/Tinyboard.php
@@ -83,9 +83,9 @@ function twig_hasPermission_filter($mod, $permission, $board = null) {
 }
 
 function twig_extension_filter($value, $case_insensitive = true) {
-	$ext = substr($value, strrpos($value, '.') + 1);
+	$ext = mb_substr($value, mb_strrpos($value, '.') + 1);
 	if($case_insensitive)
-		$ext = strtolower($ext);		
+		$ext = mb_strtolower($ext);		
 	return $ext;
 }
 
@@ -96,11 +96,11 @@ function twig_sprintf_filter( $value, $var) {
 function twig_truncate_filter($value, $length = 30, $preserve = false, $separator = '&hellip;') {
 	if (mb_strlen($value) > $length) {
 		if ($preserve) {
-			if (false !== ($breakpoint = strpos($value, ' ', $length))) {
+			if (false !== ($breakpoint = mb_strpos($value, ' ', $length))) {
 				$length = $breakpoint;
 			}
 		}
-		return substr($value, 0, $length) . $separator;
+		return mb_substr($value, 0, $length) . $separator;
 	}
 	return $value;
 }
diff --git a/templates/post_thread.html b/templates/post_thread.html
index 6d14f207..21add308 100644
--- a/templates/post_thread.html
+++ b/templates/post_thread.html
@@ -23,9 +23,9 @@
 		{% if config.show_filename and post.filename %}
 			, 
 			{% if post.filename|length > config.max_filename_display %}
-				<span class="postfilename" title="{{ post.filename|bidi_cleanup }}">{{ post.filename|truncate(config.max_filename_display)|bidi_cleanup }}</span>
+				<span class="postfilename" title="{{ post.filename|e|bidi_cleanup }}">{{ post.filename|truncate(config.max_filename_display)|bidi_cleanup }}</span>
 			{% else %}
-				<span class="postfilename">{{ post.filename|bidi_cleanup }}</span>
+				<span class="postfilename">{{ post.filename|e|bidi_cleanup }}</span>
 			{% endif %}
 		{% endif %}
 		{% if post.thumb != 'file' and config.image_identification %}