Program: 42445
Project: 42445
Buggy source:
protected static String buildCacheKey(String listName,Collection<String> userGroupCodes,RequestContext reqCtx){
  IPage page=(null != reqCtx) ? (IPage)reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_PAGE) : null;
  StringBuilder cacheKey=(null != page) ? new StringBuilder(page.getCode()) : new StringBuilder("String_Node_Str");
  Widget currentWidget=(null != reqCtx) ? (Widget)reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_WIDGET) : null;
  if (null != currentWidget && null != currentWidget.getType()) {
    cacheKey.append("String_Node_Str").append(currentWidget.getType().getCode());
  }
  if (null != reqCtx) {
    Integer frame=(Integer)reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_FRAME);
    if (null != frame) {
      cacheKey.append("String_Node_Str").append(frame.intValue());
    }
    Lang currentLang=(Lang)reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_LANG);
    if (null != currentLang) {
      cacheKey.append("String_Node_Str").append(currentLang.getCode()).append("String_Node_Str");
    }
  }
  List<String> groupCodes=new ArrayList<String>(userGroupCodes);
  if (!groupCodes.contains(Group.FREE_GROUP_NAME)) {
    groupCodes.add(Group.FREE_GROUP_NAME);
  }
  Collections.sort(groupCodes);
  for (  String code : groupCodes) {
    cacheKey.append("String_Node_Str").append(code);
  }
  if (null != currentWidget && null != currentWidget.getConfig()) {
    List<String> paramKeys=new ArrayList(currentWidget.getConfig().keySet());
    Collections.sort(paramKeys);
    for (int i=0; i < paramKeys.size(); i++) {
      if (i == 0) {
        cacheKey.append("String_Node_Str");
      }
 else {
        cacheKey.append("String_Node_Str");
      }
      String paramkey=(String)paramKeys.get(i);
      cacheKey.append(paramkey).append("String_Node_Str").append(currentWidget.getConfig().getProperty(paramkey));
    }
  }
  if (null != listName) {
    cacheKey.append("String_Node_Str").append(listName);
  }
  return cacheKey.toString();
}

Fixed version (ground truth):
public static String buildCacheKey(IContentListTagBean bean,RequestContext reqCtx){
  UserDetails currentUser=(UserDetails)reqCtx.getRequest().getSession().getAttribute(SystemConstants.SESSIONPARAM_CURRENT_USER);
  StringBuilder baseCacheKey=ContentListHelper.buildStringBuilderCacheKey(bean,currentUser);
  IPage page=(null != reqCtx) ? (IPage)reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_PAGE) : null;
  if (null == page) {
    baseCacheKey.append("String_Node_Str");
  }
 else {
    baseCacheKey.append("String_Node_Str" + page.getCode());
  }
  Widget currentWidget=(null != reqCtx) ? (Widget)reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_WIDGET) : null;
  if (null != currentWidget && null != currentWidget.getConfig()) {
    List<String> paramKeys=new ArrayList(currentWidget.getConfig().keySet());
    Collections.sort(paramKeys);
    for (int i=0; i < paramKeys.size(); i++) {
      if (i == 0) {
        baseCacheKey.append("String_Node_Str");
      }
 else {
        baseCacheKey.append("String_Node_Str");
      }
      String paramkey=(String)paramKeys.get(i);
      baseCacheKey.append(paramkey).append("String_Node_Str").append(currentWidget.getConfig().getProperty(paramkey));
    }
  }
  return DigestUtils.md5Hex(baseCacheKey.toString());
}