Changeset - r10801:64b9bb8550d8
[Not reviewed]
master
0 5 0
rubidium - 15 years ago 2009-01-18 13:12:57
rubidium@openttd.org
(svn r15135) -Fix/Change: allow str_validate (part of receiving strings from the network) to pass newlines instead of replacing them with question marks, but only when asked to do so.
5 files changed with 13 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/network/core/packet.cpp
Show inline comments
 
@@ -233,7 +233,7 @@ uint64 Packet::Recv_uint64()
 
}
 

	
 
/** Reads a string till it finds a '\0' in the stream */
 
void Packet::Recv_string(char *buffer, size_t size)
 
void Packet::Recv_string(char *buffer, size_t size, bool allow_newlines)
 
{
 
	PacketSize pos;
 
	char *bufp = buffer;
 
@@ -253,7 +253,7 @@ void Packet::Recv_string(char *buffer, s
 
	}
 
	this->pos = pos;
 

	
 
	str_validate(bufp);
 
	str_validate(bufp, allow_newlines);
 
}
 

	
 
#endif /* ENABLE_NETWORK */
src/network/core/packet.h
Show inline comments
 
@@ -62,7 +62,7 @@ public:
 
	uint16 Recv_uint16();
 
	uint32 Recv_uint32();
 
	uint64 Recv_uint64();
 
	void   Recv_string(char *buffer, size_t size);
 
	void   Recv_string(char *buffer, size_t size, bool allow_newlines = false);
 
};
 

	
 
Packet *NetworkSend_Init(PacketType type);
src/network/network_content.cpp
Show inline comments
 
@@ -53,7 +53,7 @@ DEF_CONTENT_RECEIVE_COMMAND(Client, PACK
 
	p->Recv_string(ci->name, lengthof(ci->name));
 
	p->Recv_string(ci->version, lengthof(ci->name));
 
	p->Recv_string(ci->url, lengthof(ci->url));
 
	p->Recv_string(ci->description, lengthof(ci->description));
 
	p->Recv_string(ci->description, lengthof(ci->description),  true);
 

	
 
	ci->unique_id = p->Recv_uint32();
 
	for (uint j = 0; j < sizeof(ci->md5sum); j++) {
src/string.cpp
Show inline comments
 
@@ -98,7 +98,7 @@ char *CDECL str_fmt(const char *str, ...
 
}
 

	
 

	
 
void str_validate(char *str)
 
void str_validate(char *str, bool allow_newlines)
 
{
 
	char *dst = str;
 
	WChar c;
 
@@ -113,7 +113,14 @@ void str_validate(char *str)
 
			do {
 
				*dst++ = *str++;
 
			} while (--len != 0);
 
		} else if (allow_newlines && c == '\n') {
 
			*dst++ = *str++;
 
		} else {
 
			if (allow_newlines && c == '\r' && str[1] == '\n') {
 
				str += len;
 
				continue;
 
			}
 
			assert(c != '\r');
 
			/* Replace the undesirable character with a question mark */
 
			str += len;
 
			*dst++ = '?';
src/string_func.h
Show inline comments
 
@@ -95,7 +95,7 @@ char *CDECL str_fmt(const char *str, ...
 

	
 
/** Scans the string for valid characters and if it finds invalid ones,
 
 * replaces them with a question mark '?' */
 
void str_validate(char *str);
 
void str_validate(char *str, bool allow_newlines = false);
 

	
 
/** Scans the string for colour codes and strips them */
 
void str_strip_colours(char *str);
0 comments (0 inline, 0 general)