refuse some chars on HG url region name
This commit is contained in:
@@ -32,17 +32,18 @@ namespace OpenSim.Framework
|
||||
{
|
||||
public class RegionURI
|
||||
{
|
||||
private static byte[] schemaSep = osUTF8.GetASCIIBytes("://");
|
||||
private static byte[] altschemaSep = osUTF8.GetASCIIBytes("|!!");
|
||||
private static byte[] nameSep = osUTF8.GetASCIIBytes(":/ ");
|
||||
private static byte[] altnameSep = osUTF8.GetASCIIBytes(":/ +|");
|
||||
private static byte[] escapePref = osUTF8.GetASCIIBytes("+%");
|
||||
private static byte[] altPortSepPref = osUTF8.GetASCIIBytes(":|");
|
||||
private static readonly byte[] schemaSep = osUTF8.GetASCIIBytes("://");
|
||||
private static readonly byte[] altschemaSep = osUTF8.GetASCIIBytes("|!!");
|
||||
private static readonly byte[] nameSep = osUTF8.GetASCIIBytes(":/ ");
|
||||
private static readonly byte[] altnameSep = osUTF8.GetASCIIBytes(":/ +|");
|
||||
private static readonly byte[] escapePref = osUTF8.GetASCIIBytes("+%");
|
||||
private static readonly byte[] altPortSepPref = osUTF8.GetASCIIBytes(":|");
|
||||
private static readonly byte[] forbidonname = osUTF8.GetASCIIBytes(".,:;\\/");
|
||||
|
||||
public enum URIFlags : int
|
||||
{
|
||||
None = 0,
|
||||
Valid = 1 << 0,
|
||||
//Valid = 1 << 0,
|
||||
HasHost = 1 << 1,
|
||||
HasResolvedHost = 1 << 2,
|
||||
HasUserName = 1 << 3,
|
||||
@@ -70,7 +71,7 @@ namespace OpenSim.Framework
|
||||
{
|
||||
originalURI = _originalURI;
|
||||
Parse(_originalURI);
|
||||
if (!HasHost)
|
||||
if (!HasHost && HasRegionName)
|
||||
Flags |= URIFlags.IsLocalGrid;
|
||||
}
|
||||
|
||||
@@ -81,7 +82,10 @@ namespace OpenSim.Framework
|
||||
|
||||
if(!HasHost)
|
||||
{
|
||||
Flags |= URIFlags.IsLocalGrid;
|
||||
if(!HasRegionName)
|
||||
Flags = URIFlags.None;
|
||||
else
|
||||
Flags |= URIFlags.IsLocalGrid;
|
||||
return;
|
||||
}
|
||||
if(gi == null)
|
||||
@@ -290,6 +294,12 @@ namespace OpenSim.Framework
|
||||
if (tmpSlice.Length <= 0)
|
||||
return;
|
||||
|
||||
if(tmpSlice.IndexOfAny(forbidonname) > 0)
|
||||
{
|
||||
Flags = URIFlags.None;
|
||||
return;
|
||||
}
|
||||
|
||||
RegionName = tmpSlice.ToString();
|
||||
Flags |= URIFlags.HasRegionName;
|
||||
|
||||
|
||||
@@ -310,6 +310,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
|
||||
|
||||
public GridRegion GetRegionByURI(UUID scopeID, RegionURI uri)
|
||||
{
|
||||
if(!uri.IsValid)
|
||||
return null;
|
||||
GridRegion rinfo = m_LocalGridService.GetRegionByURI(scopeID, uri);
|
||||
if (rinfo != null)
|
||||
{
|
||||
|
||||
@@ -472,14 +472,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
if (data.Length < 8)
|
||||
return null;
|
||||
var minLength = ((data.Length * 3) + 3) / 4;
|
||||
var bindata = ArrayPool<byte>.Shared.Rent(minLength);
|
||||
int minLength = ((data.Length * 3) + 3) / 4;
|
||||
byte[] bindata = ArrayPool<byte>.Shared.Rent(minLength);
|
||||
try
|
||||
{
|
||||
if (Convert.TryFromBase64Chars(data, bindata, out int bytesWritten))
|
||||
return FromBin(bindata);
|
||||
}
|
||||
catch
|
||||
catch
|
||||
{
|
||||
}
|
||||
finally
|
||||
@@ -496,7 +496,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
using MemoryStream ms = new(m_MemoryUsed);
|
||||
ToBin(ms);
|
||||
return ms.ToArray();
|
||||
return ms.Length > 0 ? ms.ToArray() : null;
|
||||
}
|
||||
|
||||
public void ToBin(MemoryStream ms)
|
||||
|
||||
Reference in New Issue
Block a user