ãµãŒããŒåŽã®ãããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ããªãŒãã³ãœãŒã¹ã®ãã°ã¬ããŒãã«è¡šç€ºãããããšã¯ãã£ãã«ãããŸãããããã¯ãããã圌ãã®äººæ°ã«ãããã®ã§ããçµå±ã®ãšãããç§ãã¡ã¯èªè èªèº«ãç§ãã¡ã«æäŸãããããžã§ã¯ãã«æ³šæãæãããã«ããŠããŸãããŸãããµãŒããŒã¯éåžžã«éèŠãªæ©èœãå®è¡ããããšããããããŸããããã®ã¢ã¯ãã£ããã£ãšå©ç¹ã¯ã»ãšãã©ã®ãŠãŒã¶ãŒã«ã¯èŠããŸããããããã£ãŠãçŽç²ã«å¶ç¶ã«ãONLYOFFICE CommunityServerã³ãŒãããã§ãã¯ãããŸãããããã¯éåžžã«é¢çœãã¬ãã¥ãŒã§ããããšã倿ããŸããã
åæžã
ONLYOFFICE Community Serverã¯ãããã¥ã¡ã³ãããããžã§ã¯ãã顧客ãšã®ããåããããã³é»åã¡ãŒã«éä¿¡ã1ãæã§ç®¡çããããã«èšèšãããç¡æã®ãªãŒãã³ãœãŒã¹ã³ã©ãã¬ãŒã·ã§ã³ã·ã¹ãã ã§ããå瀟㮠ãŠã§ããµã€ãã§ã¯ããONLYOFFICEã§ãã©ã€ããŒããªãã£ã¹ãéå¶ããããããªãã£ã¹ãšçç£æ§ã®é«ãã¢ããªãä¿è·ããããªã©ã®ãã¬ãŒãºã§ãœãªã¥ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã匷調ããŠããŸããããããæããã«ãã³ãŒãã®å質管çã®ããã®ããŒã«ã¯éçºããã»ã¹ã§äœ¿çšãããŠããŸããã
ããã¯ãã¹ãŠãèªåã®ã¢ããªã±ãŒã·ã§ã³ã®ã¢ã€ãã¢ã®1ã€ãå®è£ ããããã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ãæ±ããŠãããã€ãã®ãããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒãã調ã¹ããšããäºå®ããå§ãŸããŸãããPVS-Studioã¢ãã©ã€ã¶ãŒã¯ããã¯ã°ã©ãŠã³ãã§å®è¡ãããŠããŸãã ãããŠãç§ã¯äžè¬çãªäŒæ¥ã®ãã£ããã«é¢çœãééããæããããŸããã
ã ãããããã€ãã®äŸããã€ãã¿ãŒã«è¡ããŸã ãïŒ
代衚è ã¯åŸã§ãã€ãŒãã«ã³ã¡ã³ãããããã«åŸã§åé¡ã®åŠå®ãæçš¿ããŸããïŒ
ããã¯ããããçå®ã§ããããããããã¯ãããžã§ã¯ãã®å質ã«ãã€ã³ãã远å ããŸãããããã§ä»ã«äœãèŠã€ãã£ããèŠãŠã¿ãŸãããã
å ¥åæ€èšŒãŠã£ã¶ãŒã
å ¥åããŒã¿ãæ€èšŒããããã®éçºè ã®ã¢ãããŒãã®ããã€ãã¯ããã®ç¬åµæ§ã«éç«ã£ãŠããŸãã
èŠå
1V3022åŒ 'string.IsNullOrEmptyïŒ "password"ïŒ'ã¯åžžã«falseã§ããSmtpSettings.cs 104
public void SetCredentials(string userName, string password, string domain)
{
if (string.IsNullOrEmpty(userName))
{
throw new ArgumentException("Empty user name.", "userName");
}
if (string.IsNullOrEmpty("password"))
{
throw new ArgumentException("Empty password.", "password");
}
CredentialsUserName = userName;
CredentialsUserPassword = password;
CredentialsDomain = domain;
}
ã芧ã®ãšããããã®ã³ãŒãã¯èšäºå šäœã®ããŒã³ãèšå®ããŸãã ãã³ãŒãã¯é¢çœãããç¶æ³ã¯ã²ã©ãããšãããã¬ãŒãºã§èª¬æã§ããŸããpassword倿°ã"password"æååãš æ··åããã«ã¯ãããããéåžžã«ç²ããå¿ èŠããã ãŸãããã®ãšã©ãŒã«ããã空ã®ãã¹ã¯ãŒãã§ã³ãŒããå®è¡ãç¶ããããšãã§ããŸããã³ãŒãã®äœæè ã«ãããšããã¹ã¯ãŒãã¯ããã°ã©ã ã€ã³ã¿ãŒãã§ã€ã¹ã§è¿œå ã§ãã§ãã¯ãããŸããããããããã°ã©ãã³ã°ããã»ã¹ã¯ã以åã«äœæããã颿°ãé »ç¹ã«åå©çšãããããã«èšèšãããŠããŸãããããã£ãŠããã®ãšã©ãŒã¯å°æ¥ã©ãã«ã§ãçŸããå¯èœæ§ããããŸããã³ãŒãã®ãã°ãæ©æã«çºèŠããããšã®éèŠæ§ãåžžã«èŠããŠãããŠãã ããã
èŠå
2V3022åŒ 'String.IsNullOrEmptyïŒ "name"ïŒ'ã¯åžžã«falseã§ãã SendInterceptorSkeletonã cs 36
V3022åŒ 'String.IsNullOrEmptyïŒ "sendInterceptor"ïŒ'ã¯åžžã«falseã§ããSendInterceptorSkeleton.cs 37
public SendInterceptorSkeleton(
string name,
....,
Func<NotifyRequest, InterceptorPlace, bool> sendInterceptor)
{
if (String.IsNullOrEmpty("name")) // <=
throw new ArgumentNullException("name");
if (String.IsNullOrEmpty("sendInterceptor")) // <=
throw new ArgumentNullException("sendInterceptor");
method = sendInterceptor;
Name = name;
PreventPlace = preventPlace;
Lifetime = lifetime;
}
çªç¶ãã³ãŒãã«åæ§ã®ãšã©ãŒã倿°çºçããŸãããæåã¯é¢çœãã£ãã®ãªããä»ã§ã¯ãã®ãããªã³ãŒããæžãçç±ãèãã䟡å€ããããŸãããã¶ãããã®ç¿æ £ã¯å¥ã®ããã°ã©ãã³ã°èšèªããåãæ¿ããåŸãæ®ã£ãŠããŸãããC ++ã§ã¯ãC ++ãããžã§ã¯ãããã§ãã¯ããçµéšã§ãå Pythonããã°ã©ããŒãééããç¯ãããšããããããŸãã
èŠå
3V3022åŒ 'id <0'ã¯åžžã«falseã§ãã笊å·ãªãã¿ã€ãã®å€ã¯åžžã«> = 0ã§ããUserFolderEngine.cs173
public MailUserFolderData Update(uint id, string name, uint? parentId = null)
{
if (id < 0)
throw new ArgumentException("id");
....
}
IDã®å€æ°ã¯ 笊å·ãªãã§ããUINTã®ã¿ã€ã ããããã£ãŠãããã§ã¯ãã§ãã¯ã¯ç¡æå³ã§ãããã®é¢æ°ã®åŒã³åºãã«ã¯æ³šæãå¿ èŠã§ãããã®é¢æ°ã«äœãæž¡ãããŠããã®ã ããããã»ãšãã©ã®å Žåãsigned type intãã©ãã§ã䜿çšãã㊠ããŸãããããªãã¡ã¯ã¿ãªã³ã°åŸããã§ãã¯ãæ®ã£ãŠããŸããã
ã³ãŒããã³ããŒããŠè²Œãä»ãã
1èŠå
V3001å·Šã«ãšã&&ãæŒç®åã®å³åŽã«åãéšååŒãsearchFilterData.WithCalendar == WithCalendarãããããŸããMailSearchFilterData.cs 131
ãã®ã³ãŒãã¯ãèšè¿°ãããæ¡ä»¶åŒã®ã¹ã±ãŒã«ãäŒããããã«ç»åãšããŠæç€ºããå¿ èŠããããŸããããã®äžã«åé¡é åããããŸããã¢ãã©ã€ã¶ãŒã®èŠåã§å Žæãæå®ããŠãã2ã€ã®åäžã®ãã§ãã¯ãèŠã€ããã®ã«åœ¹ç«ã€ããšã¯ã»ãšãã©ãããŸããããããã£ãŠãèµ€ãããŒã«ãŒã䜿çšããŸãã
ãããŠãããã¯ã¢ãã©ã€ã¶ãŒãèŠåããã®ãšåãæ¡ä»¶ã§ãããããä¿®æ£ããããšã«å ããŠãå°æ¥ãã®ãããªãšã©ãŒã®åºçŸã«å¯äžããªãããã«ãã³ãŒãã®ã¹ã¿ã€ã«ãæ¹åããããšããå§ãããŸãã
èŠå
2V3030宿çãªãã§ãã¯ã'ïŒString.IsNullOrEmptyïŒuserïŒ'æ¡ä»¶ã¯ã173è¡ç®ã§ãã§ã«æ€èšŒãããŠããŸããCommonLinkUtility.cs176
public static string GetUserProfile(string user, bool absolute)
{
var queryParams = "";
if (!String.IsNullOrEmpty(user))
{
var guid = Guid.Empty;
if (!String.IsNullOrEmpty(user) && 32 <= user.Length && user[8] == '-')
{
....
}
åãæ¹æ³ã§ããŠãŒã¶ãŒæååã 2åç¶ããŠãã§ãã¯ããŸããããããããã®ã³ãŒãã¯å°ããªãã¡ã¯ã¿ãªã³ã°ã§ããŸãã誰ãç¥ã£ãŠãããšããŠãããããã1ã€ã®ã±ãŒã¹ã§ã¯ãããŒã«å€æ°absoluteããã§ãã¯ãããã£ãã®ã§ããã ã
èŠå
3V3021åäžã®æ¡ä»¶åŒãæã€2ã€ã®ãifãã¹ããŒãã¡ã³ãããããŸããæåã® 'if'ã¹ããŒãã¡ã³ãã«ã¯ã¡ãœããreturnãå«ãŸããŠããŸããããã¯ã2çªç®ã®ãifãã¹ããŒãã¡ã³ããç¡æå³ãªWikiEngine.cs688ã§ããããšãæå³ããŸãã
private static LinkType CheckTheLink(string str, out string sLink)
{
sLink = string.Empty;
if (string.IsNullOrEmpty(str))
return LinkType.None;
if (str[0] == '[')
{
sLink = str.Trim("[]".ToCharArray()).Split('|')[0].Trim();
}
else if (....)
{
sLink = str.Split('|')[0].Trim();
}
sLink = sLink.Split('#')[0].Trim(); // <=
if (string.IsNullOrEmpty(str)) // <=
return LinkType.None;
if (sLink.Contains(":"))
{
....
}
....
}
ããã§ééããèŠã€ããããšã¯ã§ããªããšç¢ºä¿¡ããŠããŸããã¢ãã©ã€ã¶ãŒã¯åœ¹ã«ç«ããªããã§ãã¯ãèŠã€ããŸãããããã¯äžããã³ããŒãããã³ãŒãã§ããããšã倿ããŸãããstr倿°ã®ä»£ããã«ã sLink倿°ããã§ãã¯ããå¿ èŠããããŸã ã
èŠå
4V3004ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ããSelectelStorage.cs 461
public override string[] ListFilesRelative(....)
{
var paths = new List<String>();
var client = GetClient().Result;
if (recursive)
{
paths = client.GetContainerFilesAsync(_private_container, int.MaxValue,
null, MakePath(domain, path)).Result.Select(x => x.Name).ToList();
}
else
{
paths = client.GetContainerFilesAsync(_private_container, int.MaxValue,
null, MakePath(domain, path)).Result.Select(x => x.Name).ToList();
}
....
}
ã¢ãã©ã€ã¶ãŒã¯ãéåžžã«ããããããã³ããŒã¢ã³ãããŒã¹ãã³ãŒããæ€åºããŸããããããããããã±ãŒã¹ã§ã¯ãpaths倿°ã ååž°çã«èšç®ããå¿ èŠããããŸãããããã¯è¡ãããŠããŸããã
èŠå
5V3009ãã®ã¡ãœãããåžžã«åãå€ã®ãtrueããè¿ãã®ã¯å¥åŠãªããšã§ããMessageEngine.cs 318
//TODO: Simplify
public bool SetUnread(List<int> ids, bool unread, bool allChain = false)
{
....
if (!chainedMessages.Any())
return true;
var listIds = allChain
? chainedMessages.Where(x => x.IsNew == !unread).Select(....).ToList()
: ids;
if (!listIds.Any())
return true;
....
return true;
}
ãã®é¢æ°ã®ãµã€ãºã¯135è¡ã§ããéçºè èªèº«ã§ãããããã¯åçŽåãããã¹ãã§ãããšããã³ã¡ã³ããæ®ããŸãããããªãã¯ééããªãæ©èœã³ãŒããæ±ãå¿ èŠããããŸãããªããªã ãŸãããã¹ãŠã®å Žåã«1ã€ã®å€ãè¿ããŸãã
圹ã«ç«ããªã颿°åŒã³åºã
èŠå
1V3010颿°ãDistinctãã®æ»ãå€ã䜿çšããå¿ èŠããããŸããDbTenantService.cs 132
public IEnumerable<Tenant> GetTenants(string login, string passwordHash)
{
//new password
result = result.Concat(ExecList(q).ConvertAll(ToTenant)).ToList();
result.Distinct();
....
}
Distinctã¡ãœãã ã¯ãã³ã¬ã¯ã·ã§ã³ããéè€ãåé€ããŸãããã ããCïŒã§ã¯ããããã®æ¡åŒµã¡ãœããã®ã»ãšãã©ã¯ãªããžã§ã¯ãã倿Žãããã³ããŒãäœæããŸãããããã£ãŠããã®äŸã§ã¯ãçµæãªã¹ã ã¯ã¡ãœããåŒã³åºãåãšåããŸãŸã§ããloginãš passwordHashã®ååãããã§ç¢ºèªã§ã ãŸãããããããããã¯å¥ã®ã»ãã¥ãªãã£åé¡ã§ãã
èŠå
2V3010颿°ãToStringãã®æ»ãå€ãå©çšããå¿ èŠããããŸãã UserPhotoManager.cs 678
private static void ResizeImage(ResizeWorkerItem item)
{
....
using (var stream2 = new MemoryStream(data))
{
item.DataStore.Save(fileName, stream2).ToString();
AddToCache(item.UserId, item.Size, fileName);
}
....
}
ããã§ã¯ãToStringã¡ãœãã ãæšæºã§ãããªããžã§ã¯ãã®ããã¹ã衚çŸãè¿ããŸãããæ»ãå€ã¯äœ¿çšãããŸããã
èŠå
3V3010颿°ãReplaceãã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã TextFileUserImporter.cs 252
private int GetFieldsMapping(....)
{
....
if (NameMapping != null && NameMapping.ContainsKey(propertyField))
{
propertyField = NameMapping[propertyField];
}
propertyField.Replace(" ", "");
....
}
誰ããé倧ãªééããç¯ããŸãããpropertyFieldããããã£ãã ãã¹ãŠã®ã¹ããŒã¹ãåé€ããå¿ èŠããããŸããããããã¯çºçããŸãããçœ®ææ©èœ ã¯å ã®ãªããžã§ã¯ãã倿ŽããŸããã
èŠå
4V3038 '"yy"'åŒæ°ã 'Replace'ã¡ãœããã«æ°åæž¡ãããŸããã代ããã«ä»ã®åŒæ°ãæž¡ãå¿ èŠãããå¯èœæ§ããããŸããMasterLocalizationResources.cs 38
private static string GetDatepikerDateFormat(string s)
{
return s
.Replace("yyyy", "yy")
.Replace("yy", "yy") // <=
.Replace("MMMM", "MM")
.Replace("MMM", "M")
.Replace("MM", "mm")
.Replace("M", "mm")
.Replace("dddd", "DD")
.Replace("ddd", "D")
.Replace("dd", "11")
.Replace("d", "dd")
.Replace("11", "dd")
.Replace("'", "")
;
}
ããã§ã¯ãReplace颿°ã®åŒã³åºã ã¯æ£ããèšè¿°ãããŠããŸãããããå Žæã§ã¯ãå¥åŠãªåäžã®åŒæ°ã䜿çšããŠå®è¡ãããŠããŸãã
æœåšçãªNullReferenceException
èŠå
1V3022åŒ 'portalUser.BirthDate.ToStringïŒïŒ'ã¯åžžã«nullã§ã¯ãããŸããããªãã¬ãŒã¿ãŒ 'ïŒïŒ' éå°ã§ããLdapUserManager.cs 436
public DateTime? BirthDate { get; set; }
private bool NeedUpdateUser(UserInfo portalUser, UserInfo ldapUser)
{
....
_log.DebugFormat("NeedUpdateUser by BirthDate -> portal: '{0}', ldap: '{1}'",
portalUser.BirthDate.ToString() ?? "NULL", // <=
ldapUser.BirthDate.ToString() ?? "NULL"); // <=
needUpdate = true;
....
}
ToStringã¯nullã«ã¯ãªããŸãã ãæ¥ä»ãèšå®ãããŠããªãå Žåã«å€ãNULLãããããã°ãã°ã«åºåããããã«ãããã§ãã§ãã¯ãè¡ãããŸããããããããä»¥æ¥ å€ããªãå ŽåãToStringã¡ãœãã ã¯ç©ºã®æååãè¿ããããã¢ã«ãŽãªãºã ã®ãšã©ãŒããã°ã§ç®ç«ããªããªãå¯èœæ§ããããŸãã
çããããã®ã³ã°å Žæã®ãªã¹ãå šäœã¯æ¬¡ã®ããã«ãªããŸãã
- V3022åŒ 'ldapUser.BirthDate.ToStringïŒïŒ'ã¯åžžã«nullã§ã¯ãããŸããããªãã¬ãŒã¿ãŒ 'ïŒïŒ' éå°ã§ããLdapUserManager.cs 437
- V3022åŒ 'portalUser.Sex.ToStringïŒïŒ'ã¯åžžã«nullã§ã¯ãããŸããããªãã¬ãŒã¿ãŒ 'ïŒïŒ' éå°ã§ããLdapUserManager.cs 444
- V3022åŒ 'ldapUser.Sex.ToStringïŒïŒ'ã¯åžžã«nullã§ã¯ãããŸããããªãã¬ãŒã¿ãŒ 'ïŒïŒ' éå°ã§ããLdapUserManager.cs 445
2èŠå
V3095ãããnullã«ç §ãããŠæ€èšŒãããåã«ãã¶ã»ãr.Attributesã[ ãHREFã]ããªããžã§ã¯ãã䜿çšããŸããããã§ãã¯è¡ïŒ86ã87ãHelpCenterStorage.cs 86
public override void Init(string html, string helpLinkBlock, string baseUrl)
{
....
foreach (var href in hrefs.Where(r =>
{
var value = r.Attributes["href"].Value;
return r.Attributes["href"] != null
&& !string.IsNullOrEmpty(value)
&& !value.StartsWith("mailto:")
&& !value.StartsWith("http");
}))
{
....
}
....
}
HtmlãŸãã¯Xmlãè§£æããå Žåãæ€èšŒããã«ååã§å±æ§ãåç §ããããšã¯éåžžã«å±éºã§ãããã®ãã°ã¯ãhref屿§ã®å€ãæåã«ååŸãããæ¬¡ã«ãããååšãããã©ããã確èªãããšããç¹ã§ç¹ã«é åç ã§ãã
èŠå
3V3146nullã®éåç §ã®å¯èœæ§ã 'listTags.FirstOrDefault'ã¯ãããã©ã«ãã®nullå€ãè¿ãããšãã§ããŸãã FileMarker.cs 299
public static void RemoveMarkAsNew(....)
{
....
var listTags = tagDao.GetNewTags(userID, (Folder)fileEntry, true).ToList();
valueNew = listTags.FirstOrDefault(tag => tag.EntryId.Equals(....)).Count;
....
}
ã¢ãã©ã€ã¶ãŒã¯ãFirstOrDefaultã¡ãœãããåŒã³åºããçµæã®å®å šã§ãªã䜿çšãæ€åºããŸãã ããã®ã¡ãœããã¯ãæ€çŽ¢è¿°èªãæºãããªããžã§ã¯ãããªã¹ãã«ãªãå Žåãããã©ã«ãå€ãè¿ããŸããåç §ã¿ã€ãã®ããã©ã«ãå€ã¯nullåç §ã§ãããããã£ãŠãçµæã®ãªã³ã¯ã䜿çšããåã«ãããã®ããã«ããã«ããããã£ãåŒã³åºãã®ã§ã¯ãªãããã§ãã¯ããå¿ èŠããããŸãã
èŠå
4V3115ãnullãããEqualsãã¡ãœããã«æž¡ããŠããNullReferenceExceptionãã¯çºçããŸããã ResCulture.cs 28
public class ResCulture
{
public string Title { get; set; }
public string Value { get; set; }
public bool Available { get; set; }
public override bool Equals(object obj)
{
return Title.Equals(((ResCulture) obj).Title);
}
....
}
CïŒã®ãªããžã§ã¯ãåç §ã¯ãå€ãã®å Žånullãšæ¯èŒãã ãŸãããããã£ãŠãæ¯èŒã¡ãœããããªãŒããŒããŒãããå Žåããã®ãããªç¶æ³ãäºæž¬ãã颿°ã®å é ã«é©åãªãã§ãã¯ã远å ããããšãéåžžã«éèŠã§ããããããããã§ã¯ããã§ã¯ãããŸããã§ããã
ãã®ä»ã®ãã°
èŠå
1V3022åŒã¯åžžã«çã§ãããããããããã§ã¯ã&&ãæŒç®åã䜿çšããå¿ èŠããããŸããListItemHistoryDao.cs 140
public virtual int CreateItem(ListItemHistory item)
{
if (item.EntityType != EntityType.Opportunity || // <=
item.EntityType != EntityType.Contact)
throw new ArgumentException();
if (item.EntityType == EntityType.Opportunity &&
(DaoFactory.DealDao.GetByID(item.EntityID) == null ||
DaoFactory.DealMilestoneDao.GetByID(item.StatusID) == null))
throw new ArgumentException();
if (item.EntityType == EntityType.Contact &&
(DaoFactory.ContactDao.GetByID(item.EntityID) == null ||
DaoFactory.ListItemDao.GetByID(item.StatusID) == null))
throw new ArgumentException();
....
}
CreateItemã¡ãœãããåŒã³åºã ãšãArgumentExceptionãã¹ããŒãã ãŸããéèŠãªã®ã¯ãæåã®æ¡ä»¶åŒã«ãšã©ãŒãå«ãŸããŠãããšããããšã§ããæ¡ä»¶ã¯åžžã« trueãšè©äŸ¡ãããŸãããšã©ãŒã¯ãè«çæŒç®åã®éžæã«ãããŸãã &&æŒç®åã䜿çšããå¿ èŠããããŸãã
ã»ãšãã©ã®å Žåããã®ã¡ãœããã¯ãŸã åŒã³åºãããŠããŸãããããã¯ä»®æ³ã§ããããããŸã§æŽŸçã¯ã©ã¹ã§åžžã«åå®çŸ©ãããŠããŸããã
ä»åŸãã®ãããªééããé¿ããããã«ãç§ã®èšäºãèªãã§ããã®èšäºãžã®ãªã³ã¯ãä¿åããããšããå§ãããŸããã è«ç衚çŸãå°éå®¶ãééããç¯ãæ¹æ³"ãè«çæŒç®åã®ãã¹ãŠã®èª€ã£ãçµã¿åãããäžããããåæãããŸãã
èŠå
2V3052å ã®äŸå€ãªããžã§ã¯ã 'ex'ã飲ã¿èŸŒãŸããŸãããå ã®äŸå€ã®ã¹ã¿ãã¯ã倱ãããå¯èœæ§ããããŸããGoogleDriveStorage.cs267
public DriveFile CopyEntry(string toFolderId, string originEntryId)
{
var body = FileConstructor(folderId: toFolderId);
try
{
var request = _driveService.Files.Copy(body, originEntryId);
request.Fields = GoogleLoginProvider.FilesFields;
return request.Execute();
}
catch (GoogleApiException ex)
{
if (ex.HttpStatusCode == HttpStatusCode.Forbidden)
{
throw new SecurityException(ex.Error.Message);
}
throw;
}
}
ããã§ã¯ãå ã®äŸå€ããæçšãªæ å ±ã倱ããªãããGoogleApiExceptionãSecurityExceptionã«å€æã ãŸãã ã
ãã®ãããªå°ããªå€æŽã«ãããçæãããèŠåãããæçã«ãªããŸãã
throw new SecurityException(ex.Error.Message, ex);
GoogleApiExceptionãæå³çã«é ãããŠããå¯èœæ§ã¯ååã«ãã ãŸããã
èŠå
3TimeSpanã®V3118Minutesã³ã³ããŒãã³ãã䜿çšãããŠããŸãããããã¯å®å šãªæéééã衚ããã®ã§ã¯ãããŸãããããããããTotalMinutesãå€ã代ããã«æå³ãããŠããŸããã NotifyClient.cs 281
public static void SendAutoReminderAboutTask(DateTime scheduleDate)
{
....
var deadlineReminderDate = deadline.AddMinutes(-alertValue);
if (deadlineReminderDate.Subtract(scheduleDate).Minutes > 1) continue;
....
}
ç§ã¯ã蚺æã¯äºé²çã ãšæã£ãŠããŸãããç§ã®ãããžã§ã¯ãã®ã³ãŒãã§ã¯ãããã¯åžžã«èª€ã£ãèŠåãåºããŠããŸãããããã§ã¯ããã°ããã£ããšç¢ºä¿¡ããŠããŸããã»ãšãã©ã®å ŽåãMinutesã®ä»£ããã« TotalMinutesããããã£ã䜿çšããå¿ èŠããããŸã ã èŠå4V3008ãkeyã倿°ã«ã¯2åé£ç¶ããŠå€ãå²ãåœãŠãããŸããããããããã¯ééãã§ãããã§ãã¯è¡ïŒ244ã240ãMetadata.cs 244
private byte[] GenerateKey()
{
var key = new byte[keyLength];
using (var deriveBytes = new Rfc2898DeriveBytes(Password, Salt, ....))
{
key = deriveBytes.GetBytes(keyLength);
}
return key;
}
ãã®ãã©ã°ã¡ã³ãã®åé¡ã¯ã颿°ã«å ¥ããšãã«ããã€ãã®é åãåžžã«äœæãããããã«äžæžããããããšã§ããããããæå³ããªããªãã¡ã¢ãªã®äžå®ã®å²ãåœãŠããããŸãã
æåã®çã¯ãäœ¿çšæžã¿ã®CïŒ5ã§ã¯ãªãCïŒ8ã«åãæ¿ããŠãããçãã³ãŒããäœæããããšã§ãã
private byte[] GenerateKey()
{
using var deriveBytes = new Rfc2898DeriveBytes(Password, Salt, ....);
return deriveBytes.GetBytes(keyLength);
}
ãããžã§ã¯ããã¢ããã°ã¬ãŒãã§ãããã©ããã¯ããããŸãããããã®ãããªå Žæã¯ãããããããŸãããªãããã®æ¹æ³ã§æžãçŽãããšããå§ãããŸãã
- V3008ãhmacKeyã倿°ã«ã¯2åé£ç¶ããŠå€ãå²ãåœãŠãããŸããããããããã¯ééãã§ãããã§ãã¯è¡ïŒ256ã252ãMetadata.cs 256
- V3008ãhmacHashã倿°ã«ã¯2åé£ç¶ããŠå€ãå²ãåœãŠãããŸããããããããã¯ééãã§ãããã§ãã¯è¡ïŒ270ã264ãMetadata.cs 270
- V3008ãpathsã倿°ã«ã¯2åé£ç¶ããŠå€ãå²ãåœãŠãããŸããããããããã¯ééãã§ãããã§ãã¯ã©ã€ã³ïŒ512ã508ãRackspaceCloudStorage.cs 512
- V3008ãbã倿°ã«ã¯2åé£ç¶ããŠå€ãå²ãåœãŠãããŸããããããããã¯ééãã§ãããã§ãã¯è¡ïŒ265ã264ãBookmarkingUserControl.ascx.cs 265
- V3008ãtaskIdsã倿°ã«ã¯2åé£ç¶ããŠå€ãå²ãåœãŠãããŸããããããããã¯ééãã§ãããã§ãã¯ã©ã€ã³ïŒ412ã391ãTaskDao.cs 412
æåŸã®ææ®µãšããŠã倿°ã宣èšãããšãã«ã¡ã¢ãªãå²ãåœãŠãå¿ èŠã¯ãããŸããã
PVS-Studioã®ãã°
ããªãã¯ç§ãã¡ãä»äººã®éã¡ã«ã€ããŠã ãæžããŠãããšæããŸããããããç§ãã¡ã®ããŒã ã¯èªå·±æ¹å€çã§ããããã®ééããèªãããããã«ã€ããŠãæžãããšãèºèºããŸããã誰ããééã£ãŠããŸãã
ãã®èšäºã®äœæ¥äžã«ãããªãã°ããããã°ãèŠã€ãããŸãããç§ãã¡ã¯èªããå ±æããããšãæ¥ãã§ããŸãã
åãã³ãã¥ããã£ãµãŒããŒããã®ã³ãŒãïŒ
private bool IsPhrase(string searchText)
{
return searchText.Contains(" ") || searchText.Contains("\r\n") ||
searchText.Contains("\n");
}
èšäºå šäœã§è¡ãããŠããããã«ãã³ãŒãã®åã«å®å šãªã¢ãã©ã€ã¶ãŒèŠåãåºãå¿ èŠããããŸãããããããåé¡ã§ããèŠåã¯æ¬¡ã®ããã«ãªããŸãã
å¶åŸ¡æå\ rããã³\ nã¯ãããŒãã«ã«åºåãããåã«ãšã¹ã±ãŒããããŸããã
çµè«
ãããªã«é¢çœããããžã§ã¯ãã«é·ãéåºäŒã£ãããšããããŸããã ONLYOFFCEã®è²¢ç®è ã«æè¬ããŸããé£çµ¡ãããã£ãã®ã§ããããã£ãŒãããã¯ã¯ãããŸããã§ããã
ç§ãã¡ã¯å®æçã«ãã®ãããªèšäºãæžããŠããŸã ããã®ãžã£ã³ã«ã¯10幎以äžåã®ãã®ã§ãããããã£ãŠãéçºè ã¯å人çã«æ¹å€ããã¹ãã§ã¯ãããŸããããããžã§ã¯ããæ¹åããããããŸãã¯ãããžã§ã¯ãããã§ãã¯ããããã®äžæçãªã©ã€ã»ã³ã¹ãæäŸããããã«ãã¬ããŒãã®ãã«ããŒãžã§ã³ãçºè¡ãããŠããã ããŸãããããŠãCommunityServerãããžã§ã¯ãã ãã§ãªããïŒonlyofficeããã¢ãŒã·ã§ã³ã³ãŒãã䜿çšããŠ1ãæéãããåžæãããã¹ãŠã®äººã« ã
ãŸããã»ãã¥ãªãã£ã®å°éå®¶ã¯ãç§ãã¡ãOWASPæšæºãç©æ¥µçã«ãµããŒãããŠããããšãç¥ããããšæãã§ããããããã€ãã®èšºæã¯ãã§ã«å©çšå¯èœã§ãããããŠãŸããªããã¢ãã©ã€ã¶ãŒã®ã€ã³ã¿ãŒãã§ãŒã¹ãæ¹åãããã³ãŒãåæã®ããã®1ã€ãŸãã¯å¥ã®æšæºãå«ããããšãããã«äŸ¿å©ã«ãªããŸãã
ãã®èšäºãè±èªã話ãèŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãªã³ã¯SvyatoslavRazmyslovã䜿çšããŠãã ããã ONLYOFFICE Community ServerïŒãã°ãã»ãã¥ãªãã£åé¡ã®çºçã«ã©ã®ããã«å¯äžãããã