From da2ccebed8f1c87b0481ba476b4d13e601ce5feb Mon Sep 17 00:00:00 2001
From: Zach Prezkuta <fermion@gmx.com>
Date: Sat, 7 Jul 2012 18:47:13 -0600
Subject: [PATCH] fix bugs

---
 include/bbcode.php       |  6 +++---
 include/conversation.php | 19 +++++++++++++------
 include/items.php        |  8 ++++----
 mod/message.php          | 19 +++++++++++++------
 4 files changed, 33 insertions(+), 19 deletions(-)

diff --git a/include/bbcode.php b/include/bbcode.php
index 6a1c4b043..63dd9695e 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -66,10 +66,10 @@ function bb_extract_images($body) {
 		if(! strcmp(substr($orig_body, $img_start + $img_st_close, 5), 'data:')) {
 			// This is an embedded image
 
-			$saved_image[$cnt] = substr($orig_body, $img_start + $img_st_close, $img_end - $img_start);
-			$cnt++;
-
+			$saved_image[$cnt] = substr($orig_body, $img_start + $img_st_close, $img_end - ($img_start + $img_st_close));
 			$new_body = $new_body . substr($orig_body, 0, $img_start) . '[$#saved_image' . $cnt . '#$]';
+
+			$cnt++;
 		}
 		else
 			$new_body = $new_body . substr($orig_body, 0, $img_end + strlen('[/img]'));
diff --git a/include/conversation.php b/include/conversation.php
index 4fea52c9c..240cd374f 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -22,10 +22,10 @@ function item_extract_images($body) {
 		if(! strcmp(substr($orig_body, $img_start + $img_st_close, 5), 'data:')) {
 			// This is an embedded image
 
-			$saved_image[$cnt] = substr($orig_body, $img_start + $img_st_close, $img_end - $img_start);
-			$cnt++;
-
+			$saved_image[$cnt] = substr($orig_body, $img_start + $img_st_close, $img_end - ($img_start + $img_st_close));
 			$new_body = $new_body . substr($orig_body, 0, $img_start) . '[!#saved_image' . $cnt . '#!]';
+
+			$cnt++;
 		}
 		else
 			$new_body = $new_body . substr($orig_body, 0, $img_end + strlen('[/img]'));
@@ -48,22 +48,29 @@ function item_extract_images($body) {
 if(! function_exists('item_redir_and_replace_images')) {
 function item_redir_and_replace_images($body, $images, $cid) {
 
-	$newbody = $body;
+	$origbody = $body;
+	$newbody = '';
 
 	for($i = 0; $i < count($images); $i++) {
 		$search = '/\[url\=(.*?)\]\[!#saved_image' . $i . '#!\]\[\/url\]' . '/is';
 		$replace = '[url=' . z_path() . '/redir/' . $cid 
 		           . '?f=1&url=' . '$1' . '][!#saved_image' . $i . '#!][/url]' ;
 
-		$newbody = preg_replace($search, $replace, $newbody);
+		$img_end = strpos($origbody, '[!#saved_image' . $i . '#!][/url]') + strlen('[!#saved_image' . $i . '#!][/url]');
+		$process_part = substr($origbody, 0, $img_end);
+		$origbody = substr($origbody, $img_end);
+
+		$process_part = preg_replace($search, $replace, $process_part);
+		$newbody = $newbody . $process_part;
 	}
+	$newbody = $newbody . $origbody;
 
 	$cnt = 0;
 	foreach($images as $image) {
 		// We're depending on the property of 'foreach' (specified on the PHP website) that
 		// it loops over the array starting from the first element and going sequentially
 		// to the last element
-		$newbody = str_replace('[$#saved_image' . $cnt . '#$]', '[img]' . $image . '[/img]', $newbody);
+		$newbody = str_replace('[!#saved_image' . $cnt . '#!]', '[img]' . $image . '[/img]', $newbody);
 		$cnt++;
 	}
 
diff --git a/include/items.php b/include/items.php
index 7bb33d943..eb3f27a16 100755
--- a/include/items.php
+++ b/include/items.php
@@ -326,7 +326,7 @@ function limit_body_size($body) {
 				}
 				else {
 					$new_body = $new_body . substr($orig_body, 0, $img_start);
-					$textlen += $img_start
+					$textlen += $img_start;
 				}
 
 				$new_body = $new_body . substr($orig_body, $img_start, $img_end - $img_start);
@@ -3192,7 +3192,7 @@ function fix_private_photos($s, $uid, $item = null, $cid = 0) {
 
 	$img_start = strpos($orig_body, '[img');
 	$img_st_close = ($img_start !== false ? strpos(substr($orig_body, $img_start), ']') : false);
-	$img_len = ($img_start !== false ? strpos(substr($orig_body, $img_start), '[/img]') : false);
+	$img_len = ($img_start !== false ? strpos(substr($orig_body, $img_start + $img_st_close + 1), '[/img]') : false);
 	while( ($img_st_close !== false) && ($img_len !== false) ) {
 
 		$img_st_close++; // make it point to AFTER the closing bracket
@@ -3277,10 +3277,10 @@ function fix_private_photos($s, $uid, $item = null, $cid = 0) {
 
 		$img_start = strpos($orig_body, '[img');
 		$img_st_close = ($img_start !== false ? strpos(substr($orig_body, $img_start), ']') : false);
-		$img_len = ($img_start !== false ? strpos(substr($orig_body, $img_start), '[/img]') : false);
+		$img_len = ($img_start !== false ? strpos(substr($orig_body, $img_start + $img_st_close + 1), '[/img]') : false);
 	}
 
-	$new_body = $new_body + $orig_body;
+	$new_body = $new_body . $orig_body;
 
 	return($new_body);
 }
diff --git a/mod/message.php b/mod/message.php
index 4ffdebb12..1e9d731a4 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -109,10 +109,10 @@ function item_extract_images($body) {
 		if(! strcmp(substr($orig_body, $img_start + $img_st_close, 5), 'data:')) {
 			// This is an embedded image
 
-			$saved_image[$cnt] = substr($orig_body, $img_start + $img_st_close, $img_end - $img_start);
-			$cnt++;
-
+			$saved_image[$cnt] = substr($orig_body, $img_start + $img_st_close, $img_end - ($img_start + $img_st_close));
 			$new_body = $new_body . substr($orig_body, 0, $img_start) . '[!#saved_image' . $cnt . '#!]';
+
+			$cnt++;
 		}
 		else
 			$new_body = $new_body . substr($orig_body, 0, $img_end + strlen('[/img]'));
@@ -135,22 +135,29 @@ function item_extract_images($body) {
 if(! function_exists('item_redir_and_replace_images')) {
 function item_redir_and_replace_images($body, $images, $cid) {
 
-	$newbody = $body;
+	$origbody = $body;
+	$newbody = '';
 
 	for($i = 0; $i < count($images); $i++) {
 		$search = '/\[url\=(.*?)\]\[!#saved_image' . $i . '#!\]\[\/url\]' . '/is';
 		$replace = '[url=' . z_path() . '/redir/' . $cid 
 		           . '?f=1&url=' . '$1' . '][!#saved_image' . $i . '#!][/url]' ;
 
-		$newbody = preg_replace($search, $replace, $newbody);
+		$img_end = strpos($origbody, '[!#saved_image' . $i . '#!][/url]') + strlen('[!#saved_image' . $i . '#!][/url]');
+		$process_part = substr($origbody, 0, $img_end);
+		$origbody = substr($origbody, $img_end);
+
+		$process_part = preg_replace($search, $replace, $process_part);
+		$newbody = $newbody . $process_part;
 	}
+	$newbody = $newbody . $origbody;
 
 	$cnt = 0;
 	foreach($images as $image) {
 		// We're depending on the property of 'foreach' (specified on the PHP website) that
 		// it loops over the array starting from the first element and going sequentially
 		// to the last element
-		$newbody = str_replace('[$#saved_image' . $cnt . '#$]', '[img]' . $image . '[/img]', $newbody);
+		$newbody = str_replace('[!#saved_image' . $cnt . '#!]', '[img]' . $image . '[/img]', $newbody);
 		$cnt++;
 	}